機種依存文字入りのShiftJISを扱う。

| コメント(0) | トラックバック(0)



さて、今回の一連の仕事で手に入れた知識:ShiftJISのファイルを読み込んでUnicodeにdecodeする時にEncodeを使ってはいけない。だが、Encodeが悪い訳ではない。悪いのは機種依存文字である。もうとにかくバケバケになるのである。



#!/usr/local/bin/perl
use strict;
use Encode;

while (<>) {
print decode('sjis', $_); # バケラッタ
}

最初はこれが機種依存文字だと気づかずにこんな感じで色々やってみてたのだが



#!/usr/local/bin/perl
use strict;

binmode(STDIN, ':encoding(sjis)');
while (<>) {
print; # バケラッタ
}

ほとほと困り果てて、ようやく行き着いたのがShiftJIS::CP932::MapUTF。



#!/usr/local/bin/perl
use strict;
use ShiftJIS::CP932::MapUTF;

while (<>) {
print cp932_to_unicode($_);
}

貞廣さんありがとうっっっ!これにいきつかなかったらもう後は自分でマッピング作って変換するか、ってところでしたよ。


Author

Daisuke Maki (a.k.a lestrrat): Perl hacker, Director of Japan Perl Association, YAPC::Asia Tokyo Organizer (2009-2012), Fluent in Japanese, English. Ex-Brazilian (sorta)

#perl #c #ruby #java #mysql #english #japanese #opensource #stf #cooking #scotch #cigar


このエントリーをはてなブックマ
ークに追加

翔泳社よりモダンPerl入門(2010)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><

月別アーカイブ