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::RecursiveDowngradeObject::Applyというのは明らかにその前の段階なので、「ちゃんとやる」とは言いがたいのです。

よいこのPerl Userはその辺のとこ注意してね!

Dan the Perl5 Porter

P.S. PythonではFlagどころかUTF-8 String別のObjectというやり方で対処していて、明示性ではこの方が上とも言える。しかしTMTOWTDIにはなじまないなあ。

P^2.S. しかしそろそろ"The Recommended Ways"ぐらいは示さないとなあ。


この記事へのトラックバックURL