ゆきのぶ日記
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 と呼んでいる感じ。
文字コードは、まだよく分かっていないことが多いなぁ。
Before...
● ゆかりん [喜んでもらえたならアウトレットに誘った甲斐があったというものだ。 なお、ダブルウォールグラスは薄く作ってるため意外..]
● ゆきのぶ [いやー良かったよ。今までのロックとは何かが違うね。 割れやすいのは、なんとなく洗っててそんな気がするよ。 ただ、そん..]
● まさと [へえ、サーモグラスですか。初めて聞きました。 グラスの外に水滴がつかないんですか。良さそうですね。 どこかで見かけた..]