docMM

<< 2014年12月 >>

123456
78910111213
14151617181920
21222324252627
28293031

docMMさんの日記

(Web全体に公開)

2014年
12月18日
12:00

perl苦闘日記(2)~perlで日本語を扱う

タグ : 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が必要です。
ぃーね! (1) えどわーど 
棋譜作成
: