jsonp を perl ( module JSON) でDBの値やファイルの日本語の string を連結等を行って作成しようとしたら、また日本語 (utf8 flag)ではまった。のでメモ。
- script は UTF-8 で書き、use utf8 を書いて、scritpの内部の日本語は utf8フラグをつける。
- DBD::mysql で charset utf8 でやりとりしたデータは hash,scaler ともに utf8 フラグがない。
- require で読み込んだperl.pm (日本語文字含む)については、use utf8 をつけるとutf8 フラグがつく。 use utf8 が無いと、utf8 フラグがつかない。
- utf8で書かれた、JSONファイルを スカラーで読み込み、decode_json($) したものについては utf8フラグがある。
ということになっていた。
今回は、ファイルで取り込んだ文字列は すべてutf8::encode($foo); で utf8フラグを落として使った。
また、最終出力は、 print JSON->new->encode($jsonstr) として出力。
モジュールを使った入出力は、丁寧に utf8::is_utf8 を使って、どこでフラグが立っているのか、立っていないのかを調べてから作業したほうが結局早かったかも。
require するときは、そのファイルに日本語が含まれるなら、use utf8 を書くべきかも。
コメントする