PerlのEncodeの話

| | トラックバック(0)

カテゴリ:

いつもEncodeのあたりでつまずいて、文字化けして
試行錯誤のすえになんとか動かしている状態なのだけど、
なにかわかった気がするのでメモ。

まず最初になにするかというと、
「use Encode」と書く。

次に外部からテキストを持ってくるとき、
それがどのような文字コードなのかきちんと把握する。
それを把握した上でデコードする。
デコード(decode)とは符号化されているものを"ほどく"ということ。
codeをdeするということ。
ほどかれた状態とはPerl内での"内部表現"に該当する。
内部表現というのは文字コードがUTF-8になることとほぼ同義という理解で
いいと思う。

文字コードが「ShiftJIS」の場合はShiftJIS向けのお化粧がしてあって、
それをdecodeするということは、
お化粧を落としてスッピンになるということ。

それをPerlでかくと「my $str = decode('shiftjis', $original)」となる。
こうやってできた$strはutf-8になっているので、
コンソールに出力するとき設定がutf-8になっているのなら
encodeせずともそのまま「print $str」とすれば文字化けせずに出るはず。

そうやって得られた $str をテキストファイルなどに出力する際は
再び"お化粧"してやる。
符号化する。encode。(code を enする、とは言わないか)

encodeはこうかけばよろし。
「 encode('shiftjis', $str) 」
それでおしまい。

ところで、HTMLソースに書かれたエンコードと実際のエンコードが違う場合がある。
そういう時は真のエンコードを知る必要があるが、
それを推定してくれるモジュールがある。
それが「Encode::Guess」で、以下のように使う。

use Encode::Guess qw( euc-jp shiftjis 7bit-jis );
my $enc = guess_encoding($original );
print $enc->name;

このGuessモジュールは万能なわけではなくて、
一応なんでも判定するつもりはあるけれども、
あらゆる可能性をしらみつぶしにするのはちょっと・・・という代物。
だから、可能性のある文字コードの候補をあらかじめ知らせておいて
その中で判断させるほうがよい。

参考にしたサイト
404 Blog Not Found:perl - Encode 入門
Encode - search.cpan.org
Perlによる日本語コード変換のメモ(第二版)
Encode::GUess - search.cpan.org

comments powered by Disqus

トラックバック(0)

このブログ記事を参照しているブログ一覧: PerlのEncodeの話

このブログ記事に対するトラックバックURL: http://nozawashinichi.sakura.ne.jp/MT-4.25/mt-tb.cgi/718

comments powered by Disqus

このブログ記事について

このページは、Shinichi Nozawaが2010年2月14日 16:54に書いたブログ記事です。

ひとつ前のブログ記事は「MTに未来はあるのか」です。

次のブログ記事は「気象情報を自動発信するtwitterアカウント」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。