トップ «前の日記(2007/04/06(Fri)) 最新 次の日記(2007/05/03(Thu))» 編集

ゆきのぶ日記


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 と呼んでいる感じ。

文字コードは、まだよく分かっていないことが多いなぁ。

本日のツッコミ(全2件) [ツッコミを入れる]
ばたっち (2007/04/15(Sun) 21:49)

ゆきのぶさん、Perler?

ゆきのぶ (2007/04/15(Sun) 22:15)

ええ。かなり Perl な人です。