質問: perlでuse utf8でsjisのファイルを読んで出力すると誤表示する。 下記のソースで誤表示しない方法を知りたい。 1 use utf8 2 use encode; 3 use open io => ":encoding(sjis)"; 4 binmode stdout,':utf8'; 5 open (in,'03.txt')||die "file ope err\n"; 6 @in=; 7 close in; 8 @in=(); 9 print @in; 下記のエラーが出る。 shiftjis "\x87" does not map to unicode at c:\users\usui\edmax\datagen6\03.pl line 6, line 2175.
回答: 丁度いいのがあったので。 http://charset.7jp.net/sjis.html \x87 ということは、この表の「シフトjisの2バイトコード(全角文字)のエリアマップ」の「13/14 87」というところに並んでいる 1みたいな数字とか 一文字で表した ローマ数字 ( i , ii , iii 等) を使っていませんか? これらの文字は「shift_jis」には無い文字です。 よって、unicodeに変換できません。 shift_jisを拡張した cp932 などには、これらの文字が含まれています。 https://ja.wikipedia.org/wiki/microsoft%e3%82%b3%e3%83%bc%e3%83%89%e3%83%9a%e3%83%bc%e3%82%b8932 sjisではなく、cp932で試してみてはいかがでしょうか