Wide character in print at ...
2010年11月18日に持ち込まれた謎
- piyopiyo.pl(utf-8)
- use Encode;
- use utf8;
- use open IN => ":utf8";
- binmode STDOUT, ":encoding(cp932)";
- bbb.txt(Shift_JIS)
- はじめまして。
- はじめません。
- はじらいます。
- …みたいな日本語文がぞろぞろ入ってる。
piyopiyo.plでbbb.txtを読み込み、いろいろやってからファイルにShift_JISで書き出したいだけ。
ただそれだけ。
"いろいろやる"の部分にマッチングとかもあるので、最初にUTF-8にしとく。
open(IN, "bbb.txt") or die "$!"; #これはshiftjis
while ( $line =) {
Encode::from_to($line, "shiftjis", "utf8");#ごにょごにょしてから書き出す
}
close(IN);
さて、Shift_JISに戻してファイルに書き出すぞ〜と思ったら…
Wide character in print at ...
よくみるあいつです。
別に問題ないんけど、標準出力にいろいろ出したかったので、だだだーっとあいつが現れると困る。
UTF8フラグを落としてしまおう。
"\x{0081}" does not map to cp932 at ...
UTF8フラグは落とせるけど、おもわしくない事態に。
じゃあ$lineをShift-JISにしちゃおう、と思ったらどうやってもできない。
最終的に落ち着いた解決策は、ファイルをopenするときに文字コードを指定してしまおうというやつ。
open (OUT, ">:encoding(shiftjis)","ccc.txt") or die "$!";
いまいちすっきりしない!