パスワードを忘れた? アカウント作成
521304 journal

mumumuの日記: HTML Numeric character references 2

日記 by mumumu

http://www.w3.org/TR/html401/charset.html#h-5.3.1

HTML中では、数値文字参照という形で、文字を表す
ために「&#」に続けてUnicodeのコードポイントを
挿入することが許されている。Webページや果てはRSS
においてさえ、これが挿入されているケースが存在し
ている。身近なところでの良い例はEngadget Japanese
があげられるだろう。

巷では、日本語の文字列をこの数値文字参照に変換す
るケースは結構存在している。しかし、rss2imap等で
は、この逆の処理、つまり数値文字参照を文字に変換
する処理が必要である。

----

perl -MEncode -p -i -e '
     s/\&#(x)?([a-f0-9]{1,5});/
        my $tmpstr = ($1)
                   ? pack( "H*", sprintf( "%08s", "$2" ) )
                   : pack( "N*", $2 );
        Encode::encode( "iso-2022-jp",
                        Encode::decode( "UTF-32BE", $tmpstr )
        );
     /eig;
' < engadget.xml

----

としたら思い通りにできた。HTMLの数値文字参照は、
Unicodeのコードポイントを10進数または16進数で表
現したものに過ぎない。それを32ビットのバイナリに
直せば UTF-32BE(LE)となる。あとはEncodeを通せば変
換し放題、というわけだ。

[ Update August 12th 6:30 JST by m ]

UTF-32BEに変換し、Encodeを使う方向で全面的に
修正。 御協力頂いたumqさめ、及び某チャンネルの
方々に感謝しますm(_ _)m

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

人生unstable -- あるハッカー

読み込み中...