Perlをいじって2日の者です。
WindowsVistaを使っております。
現在renameを使ってファイル名を変更しようとしています。
現在のファイル名がIDだけで、
Web上にあるそのIDに対応する情報をファイル名に追加しようとしています。
Web上の情報を取得するまではできたのですが、
変数に入れたその情報を、ファイル名に入れようとすると文字化けします。
ただ、その情報をコマンドプロントで扱う時も、テキストへ出力してみても文字化けしません。
文字化けは、文字コードなるものが原因らしいということで、
とりあえずよく見かける「UTF-8」というものにエンコードしてみたところ、
テキストへの出力が、ファイル名へのそれと同様に文字化けしました。
エンコードした上でファイル名に入れようとすると
情報のそのものがないものとして扱われるようになりました。
これはどう解釈すればいいのでしょうか?
どうすれば文字化けを解決できるでしょうか?
No.2ベストアンサー
- 回答日時:
UTF8フラグを外せばよいです。
Windows XP では 下のスクリプトをUTF8 で保存し、実行すると文字化けしないで「かきくけこ.txt」が作成されます。文字コードにCP932を指定していますが、SJISとほぼ同じです。
Vista でも同じではないでしょうか。
use strict;
use warnings;
use Encode;
use utf8;
my $file_name="あいうえお.txt";
open my $out, ">", Encode::encode('CP932', $file_name) or die;
print $out Encode::encode('CP932', "こんにちは\n");
close $out;
my $new_name = "かきくけこ.txt";
rename Encode::encode('CP932', $file_name), Encode::encode('CP932', $new_name);
exit;
回答ありがとうございます!
色々調べてる内にUTF8フラグという言葉は出てきたのですがよくわからずじまいにしていました。
今でも今ひとつ分かっていませんが
>rename Encode::encode('CP932', $file_name), Encode::encode('CP932', $new_name);
の部分をマネてみたところとりあえず文字化けは克服できました!
とりあえず処理だけ済ましてまて勉強しようとおもいます。
ありがとうございました。
No.1
- 回答日時:
windows側がUTF-8じゃないっていうオチじゃないかな。
文字コードっていうのは 文字の表示についての「地方語」みたいなものだと思えば良いよ。
つまり windowsのファイルシステムが返してくる文字コードとperlが駆動している文字コードを一致させるう必要が有るってこと。
文字コード変換関連で調べれば出てくるんじゃないかな。
迅速な回答ありがとうございます!
>つまり windowsのファイルシステムが返してくる文字コードとperlが駆動している文字コードを一致させるう必要が有るってこと。
これはなんとなくわかります。
今、基本的にエンコード無しだとshift-jisで出力されているようです。
(shift-jisにエンコードした時と出力結果が同じなため)
テキストへの出力だとこれで問題ないようです。
ただ、ファイル名に同じ情報を持っていても文字化けしてしまうので、
ファイル名だと別の文字コードが使用されているのではないかと考えています。
『windows ファイル名 文字コード』等で検索して
目についた文字コードに片っ端からエンコードしてみましたがダメでした。
(utf-8,utf-16,unicode,euc-jp,sjis)
他に何かあるでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Encodeについて
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
「何とかで始まり、何とかで終...
-
EXCELからCSVにすると余計なカ...
-
マクロを使ってフォルダー内に...
-
エクセルで数値を全角文字(カ...
-
プログラミングでは、半角括弧...
-
Excel VBAでPDFファイルをMicro...
-
COBOL・全角判定
-
Malformed UTF-8 character
-
CString から LPCTSTRの型に変換
-
CSVの定義
-
住宅にカナを入力する際に丁目...
-
各項目がダブルクォーテーショ...
-
カンマ区切りの数字をCSVフ...
-
VBA 文字に半角が含まれて...
-
エクセルにMicrosoft Barcode C...
-
データにカンマが入ったCSVデー...
-
正規表現で、特定の文字列を含...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonエラー
-
「繝・せ繝・」となる文字化け
-
Perl:ファイル名だけ文字化けする
-
1つのサイトで文字コードが混在...
-
Perlでのメール本文の解析について
-
メール(iso-2022-jp-2)のデコ...
-
IMAP4でsubjectが検索ヒットしない
-
BASP21によるbase64のデコード...
-
標準入力からのutf-8→euc-jpで...
-
jcode.pmでconvertできない
-
テキストファイルから日本語部...
-
文字コードの変換
-
jcode.plとはどんなものですか
-
quoted-printableのアルゴリズム
-
検索キーワードのデコードについて
-
Perl 文字化け
-
CGIでメールを送る際に文字...
-
httpリクエストのbody部分について
-
文字コードを指定する際sjisな...
-
CSVファイルの中で、「 , 」カ...
おすすめ情報