詩の話とかWebっぽい話とか、とにかく雑多に。
2008年08月29日
文字コードの扱いは面倒くさい
まさかの連続ニコニコ動画マイリストネタw
前回作り直した公開中ニコニコ動画マイリストのページ、自分が公開してるマイリストはニコニコ動画から引っ張ってきたRSSをそのまま表示してるだけなんで大丈夫なんだけど、更新チェックリストは一旦DBに登録した情報を表示させてて、このDBの文字コードだけがEUC-JPになってるんで一部の文字が化けてました。のを直した。UTF-8の文字列を他の文字コードに変換した際に〜(波ダッシュ)が文字化けるんだよねぇ。
今どきネット詩界隈で投稿板やらいった仕組みをカスタマイズやらスクラッチしてるところでPerl使ってるところってそうそう見ないんだけど、そういうニッチな層のためにこの件に触れると、UTF-8の文字をEUC-JPに変換する場合を例に挙げて、
my $before = '〜テストなんだよ〜'; # utf8_flag ON
my $after = Encode::encode('euc-jp', $before, Encode::XMLCREF);
print $after;
ってしておくと、出力結果がEUC-JPで
~テストなんだよ~
となるわけですね。要は変換後の文字コードに当てはめるべき文字が含まれてない場合にXMLの実体参照に置き換えられて、ブラウザでの表示では文字化けが回避されるのね。とまるごとPerl! Vol.1で小飼弾さんが言っている。
それ以前にPerlでUTF-8を扱う(扱わざるを得ない)場合の最初の壁はutf8フラグだよねー。「UTF-8のテンプレートにUTF-8の文字を挿入してるのに何でか文字化けるぅ><」とか。
あー、でも最近ぱっとしない詩投稿サイトが何かしようとするとマッシュアップ……、要は提携サイトなど自サイト以外の技術やコンテンツを複合させて新しいサービス(ないしコンテンツ)を作っていくことになるんだろうけど、そういった際にはPerl使ってるといつか必ず通る道なんで覚えておくといいかも。かつてPerlで日本語を扱う場合の定番だったjcode.plでは、普及が進んでるUTF-8が扱えないとかあるしね。