私はすでに次のコードのようなものを使用して、UTF-8エンコードに行毎にファイルの非UTF8エンコードされたコンテンツを変換する方法を知っている:Perlで入力ファイルをUTF-8エンコーディングに変換するにはどうすればよいですか?
# outfile.txt is in GB-2312 encode
open my $filter,"<",'c:/outfile.txt';
while(<$filter>){
#convert each line of outfile.txt to UTF-8 encoding
$_ = Encode::decode("gb2312", $_);
...}
しかし、私はPerlが直接全体を符号化することができると思います
#outfile.txt is in GB-2312 encode
open my $filter,"<:utf8",'c:/outfile.txt';
(Perlが言う "UTF8 "\ XD4" Unicodeにマッピングされていない" のようなもの)
と
などのUTF-8形式の入力ファイルなので、私が試した何かopen my $filter,"<",'c:/outfile.txt';
$filter = Encode::decode("gb2312", $filter);
(Perlが「未開封ファイルハンドル上のreadline()を言う!)
彼らは動作しません。しかし、入力ファイルをUTF-8エンコードに直接変換する方法はありますか?
更新:物事が思ったほど単純ではないよう
が見えます。私はラウンドアバウトの方法で入力ファイルをUTF-8コードに変換できるようになりました。最初に入力ファイルを開き、その内容をUTF-8にエンコードしてから新しいファイルに出力し、新しいファイルを開いてさらに処理します。これはコードです:
open my $filter,'<:encoding(gb2312)','c:/outfile.txt';
open my $filter_new, '+>:utf8', 'c:/outfile_new.txt';
print $filter_new $_ while <$filter>;
while (<$filter_new>){
...
}
しかし、これはあまりにも多くの仕事で、単に線で$フィルタラインのコンテンツをエンコードよりも、それがさらに厄介です。
質問に警告メッセージが記載されている場合は、質問に警告メッセージを含めてください。 :) –
@ブライアン、提案のおかげで。 – Mike
正確な警告メッセージを使用することをお勧めします:)この警告では、あなたのオープンの結果をチェックする必要があります。 –