2005年09月30日 14:33 [Edit]
ちゃんとUTF-8 flagを処理する
ちょ、ちょっとまったぁ。
naoyaのはてなダイアリー - XML::Parser を Hack して utf8 フラグ問題から解放されるちゃんとやりたい方は、 あたりを使いましょう。
これ、「ちゃんとした」方法って言われちゃうとなあ。
Perl 5 Portersのラフコンセンサスとしては、UTF-8 flagの処理のガイドラインは、
- 文字列としての処理はflagを付けて
- バイト列としての処理はflagを落として
というもので、翻訳すると
- 内部で扱いはflag付き
- 外部に出す寸前でflag落とし
ということになります。よって「いつflagを落とすか」は、「出力時」というのが望ましいわけで、具体的には
- ファイルハンドルを":utf8"付きでopen()する。すでにopen()されている場合はbinmode STDOUT, ":utf8"などとする。
- 出力時にprint encode("utf8" ...)ないしprint encode_utf8(...)する
といったところで、しかしUnicode::RecursiveDowngradeやObject::Applyというのは明らかにその前の段階なので、「ちゃんとやる」とは言いがたいのです。
よいこのPerl Userはその辺のとこ注意してね!
Dan the Perl5 Porter
P.S. PythonではFlagどころかUTF-8 String別のObjectというやり方で対処していて、明示性ではこの方が上とも言える。しかしTMTOWTDIにはなじまないなあ。
P^2.S. しかしそろそろ"The Recommended Ways"ぐらいは示さないとなあ。
Posted by dankogai at 14:33│Comments(0)│TrackBack(0)