質問: perlをwindows環境でshift-jisのテキストファイルを読 perlをwindows環境でshift-jisのテキストファイルを読み込み、読み込んだファイルをutf-8でファイルを書き込み(改行コードはlf)をする方法がわかりません。 サンプルプログラムを示してもらえると助かります。 書き込みを”binmode stdout, ":utf8";”にするだけでは、下記のようなエラーがでました。エラーの意味が良くわかりませんでした。わかれば教えてください。 malformed utf-8 character (unexpected continuation byte 0x82, with no preceding start byte) at utf.pl line 7.
回答: open でエンコードを指定すれば良いかと。 use encode; open(in, "<:encoding(sjis)", "sjis.txt") or die "can't open sjis.txt."; open(out, ">:utf8", "utf8.txt") or die "can't open utf8.txt."; binmode(out); # 改行をlfのみにする為 while (my $line = ) { print out encode('utf8', $line); # encode は utf8 フラグを外すため } close(out); close(in); print out encode('utf8', $line); は print out $line; としても動作しますが、警告が出ます。 改行コードの変更がなければ、binmode(out) も encode('utf8', ・・・) も要らないのですが・・・。 > malformed utf-8 character ・・・ スクリプト内にutf-8として正しくない文字が有るというエラーです。 「use utf8;」を宣言しているにもかかわらず、utf-8以外の文字コード(shift_jis等)でスクリプト自体が記述されている場合などに出ます。 スクリプト自体はutf-8で書くのが無難です。 参考url:http://www.rwds.net/kuroita/program/perl_unicode.html