ゆきのぶ日記
2007/04/15(Sun) [長年日記]
■ [Prog][Perl] Template::Extract と Unicode
主に自分用メモ。
Template::Extract を使って、WWW::Mechanize から取得した charset=utf-8 な html を解析しようとしたが、どうにもうまくいかない。template の内容にかかわらず、extract メソッドは常に undef を返す状態だった。何もマッチしなくて良いから、せめて {} くらいは返して欲しいのに。
同じ html を IE から取得してメモ帳からソースを保存したものを読み込んだ場合、ちゃんと解析できる。違いを調べてみたところ BOM (Byte Order Mark) ではないかと推測。下のように強引に BOM を付けてみたところ、解析に成功するようになった。
$doc_with_bom = "\xef\xbb\xbf" . $doc;
Data::Dumper を使っても表示されない違いだったので、解決に二日くらいかかってしまった。うーむ。
しかし、もっとスマートな方法はないものか。
(追記)
上記のトラブルは、そもそも template ファイルに BOM があったのが原因だった。template を BOM なしのファイルとして保存すると、問題は解決した。こっちの方がスマートですな。
BOM の有無を区別する場合、BOM なしの UTF8 エンコーディングのことを特に UTF8N と言うそうだ。Perl 周りではそのような区別はしていないようで、UTF8N を UTF8 と呼んでいる感じ。
文字コードは、まだよく分かっていないことが多いなぁ。
ゆきのぶさん、Perler?
ええ。かなり Perl な人です。