タグ :
perl
perl苦闘日記(2)~perlで日本語を扱う
最初に使ったおまじないはこれ
use Encode 'decode';
use Encode 'encode';
open (IN, "< xxxx.txt" );
$s = <IN>;
$s = decode ('UTF-8', $s );
print encode ('Shift-JIS', $s );
昔(私がprogramを書いていた頃)は日本語を扱うコードは'Shift-JIS'しかなかったので特段日本語のコードを意識する必要はありませんでした。
従って、
open (IN, "< xxxx.txt" );
$s = <IN>;
print $s;
と書けばxxxx.txtというファイルの内容が表示されたんですが、今はダメです。
xxxx.txtがShift-JISで書かれていれば表示されますが、UTF-8とという新しいコードで書かれていると文字化けします。
このことに気がつくまでファイルが何で書かれているか、なんて意識していなかったのでShift-JISで書かれたファイルとUTF-8で書かれたファイルが混在していて、余計に混乱しました。
あるファイルは正常に表示され、あるファイルは文字化けしちゃうのですから。
$s = decode ('UTF-8', $s );
は、UTF-8で書かれたコードをperlが内部で扱う文字コード(unicode)に変換することを意味しています。
perlではunicodeが標準語なので、UTF-8でコード化された文字を(unicodeにする時は)decode(コード化を解除)すると書きます。
print encode ('Shift-JIS', $s );
逆に、unicodeで書かれた文字をShift-JISにする時はenocode(コード化)すると書きます。
unicodeが標準語だと考えると、encode/decodeの使い方を間違えることはありません。
因みに、windowsはShift-JISしかしゃべりませんので、print時にencodeが必要です。