XML::SimpleとかUTF8とかまじわからん

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

カテゴリ:

以前書いた記事にもありましたが、

4.25にしたらプラグインが文字化けする

MTを4.1から4.25にしたら一部のプラグインがすんげえ文字化けする。

具体的に言うと、ひとつは自分で作って1人で使っている指定したRSSを取得して、
そのRSSの中身をダッシュボードに表示するもの。

もうひとつは、HatenaBookmarkWidget Modified

どちらも、RSSを取得して、そこに書かれたXMLの構造をXML::Simpleで解析し、
プラグインの変数化してダッシュボード上に表示するもの。

いまだにはっきりした原因・改善策はわからない。

指定したRSSを取得するプラグインの方はXML::Simpleを使うのをやめて、
XML::DOMでパースして、独自に抽出する方法を使ったら、
何とか回避できた。
回避といっても、取得するRSSの文字コードを一旦utf-8に変換し、
それをXML::DOMに喰わせて、
ハッシュに登録するときにutf8::encode($var)のようにutf8フラグを
ちまちまと一個一個落として、登録するという風にした。

以下のページを参考にさせていただいた。
[perlメモ]さくらインターネットのレンタルサーバーでeucのXMLファイルをXMLinで解析しようとするとParser.pmがエラーを吐く件について - KUMA TYPE

DOMでgetElementsByTagNameとかgetFirstChildとかしながら、
目的の変数を探さなきゃいけないのでいくらかめんどい。

そんで少しはわかったことは、これはおそらくXML::Simpleの問題だろうと
いうことである。

XML::Simpleの文字化け問題はすこしググればすぐに大量にでてくる。
XML::Simpleを使うとき、デフォルトでどのパーサを使うかが問題なのだとか、
なんとかというパーサはUTF8のファイルしか受け付けないのだとか。

延々数時間そういう情報を読んでみたが、結局わからなかった。
UTF8て何?フラグって何?バイト列って何?
いや、まあ、なんとなくはわかるけど、でも何なの?
という状態なので、自分の環境がどんな状態にあって、
何が原因なのかを突き止めることができなかった。

今回、やっと「utf8::encode($var)」とか「Encode::decode('utf-8', $xml)」という
コードを書いていくらかその感触をつかめたけれど、
やはり理解はまだまだできていないと思う。

ここはひとつ、小飼弾先生に根掘り葉掘りご教授いただけたら嬉しいのだが、
一方的に(ブログ上で)面識があるだけなので
そんなことが望めるはずもなく。

以下、備忘録としてのリンク。
perl - 勝手に添削 - WEB+DB Press Vol.32 pp.94 - 404 Blog Not Found
encode_utf8ってメソッドを使うのか?
perl:標準Moduleで漢字変換 - Monpe's Room

で、MTを4.1から4.25にしたら文字化けするようになったと書いたけど、
そこらへんもなんかあやしいかもしれない。

確かに、MT4.1とMT4.25のextlibの中身を比較すると、
「extlib/XML」以下のファイルがいくつか更新日時が違っており、
ここら辺が変化していることがわかる。

でも、ふとログをみると以下のようなエラーがでている。

shinichiのtwitter_favoritesストリーム(twitterタイプのmelonsode)の更新に失敗しました:
error in processing external entity reference at line 1, column 109, byte 109: &<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/strict.dtd">
============================================================================================================^
<!-- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -->
at /usr/local/lib/perl5/site_perl/5.8.9/mach/XML/Parser.pm line 187

何これ?

usr/local/lib/perl5/site_perl/5.8.9/mach/XML/Parser.pm line 187

で、ググってみると、上記のリンク([perlメモ]さくらインターネット....)が出てくる。

これはMTのバージョンの問題ではなく、
さくらインターネットのサーバの設定が変わったせいなのか?
と思ってしまう。

ともかく、未だによくわからない状態であります。

時間ができたら、HatenaBookmarkWidgetもXML::DOMでコーディングし直そうかな・・・。

ちなみに、以下のような文字化け。
utf8::encode($var)としたら、以前は麻雀牌のような時に文字化けしたのだけど、
これをすると、また違った文字化けの仕方になる。

しかも不思議なのは、最初の方は文字化けしなくて、途中から文字化けがはじまる点。

mojibake.png

一応、文字化け問題は解決してないけど、
現時点での最新のHatenaBookmarkWidgetを晒しておきます。

HatenaBookmarkWidget090819.zip

トラックバック(1)

このブログ記事を参照しているブログ一覧: XML::SimpleとかUTF8とかまじわからん

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

やった!やったよ!直ったよ! というわけで、経緯は前エントリを見ていただいて、 ... 続きを読む

comments powered by Disqus

このブログ記事について

このページは、Shinichi Nozawaが2009年8月19日 01:51に書いたブログ記事です。

ひとつ前のブログ記事は「ActionStreamsの使い方」です。

次のブログ記事は「MT NEWSとlerning MT」です。

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