22時58分29秒 [Perl/CGI]
UTF-8でのPerlプログラミングはよーわからん。(^_^;)
UTF-8が原因なのか、それとも、XML::Simpleが原因なのかは正確には分かりませんけど。でも、日本語文字列を含めなければうまくいくので、たぶんUTF-8が原因。
CGIで使うデータをXML形式のファイルに保存してます。で、そのファイルをXML::Simpleで読み書きすることで動くCGIを書いてます。がー。XMLに日本語を含めたときの挙動が謎すぎ。
ブラウザ上の入力フォームから日本語文字列を入力して、CGI経由でXMLファイルに出力すると...
…という謎の現象が。
しかも、もっと不思議なのは、
ということ。
データファイル内に、「文字化けしている文字列」と「文字化けしていない文字列」が混在している以上、そのデータを読み込んでいるCGI上でも、どちらかが文字化けしても良さそうなもんなのに、どっちも文字化けせず正常に表示されるんですよね…。
でも、データファイルをテキストエディタで開くと、(2度目以降に出力した日本語文字列はすべて)文字化けしてるんですよね…。
データファイル(XML)をそのままブラウザで表示させてみても、やはりテキストエディタで開いた場合と同様に文字化けしています。
でも、CGI上での表示は正常…。
謎です。
CGI上で文字列を扱う処理に問題があるんだろうと思うんですけど、思いつくことはいろいろやってみたものの原因は分からず。(^_^;)
うがーっ。
で、いろいろ試行錯誤していると、次のようなことも分かりました。
ううーん。
で、Jcode.pmを使って、変数内の文字コードを調べてみると、さらによく分からんことに。
…。(^_^;)
XMLファイル自身の文字コードは、UTF-8です。
謎だよなあ。逆だったら(=文字化けしてる方がasciiだと判定されるなら)分からんでもないのだけど。^^;;;
なんで、正常に読めている方(=UTF-8で書けていると考えられる)が「ascii」と判定されるんだろうか。^^;;;
PerlでUTF-8な文字列を扱う場合には、「UTF-8フラグ」というのが問題になるらしいです。で、「UTF-8フラグ」を落とすコードを書いてみたモノの、フラグを落としても落とさなくても現象に変化なし。
ううーん。そのコードが間違ってんのかなあ。
文字コードの問題さえなければ、わりと順調に開発進んでるんだけどなあああああ。(^_^;)
この日記へのコメントはお気軽に! コメント数:1件
コメント数: 1件
私も同じような経験があります。
挙動がロジカルとは思えなかったので、すべてバイナリ
で処理をして、文字コードの判定や、必要であればその
変換部分を自分で組むことにして解決しました。
究極的にはそういった方法しかないのだと思います。
投稿者 とおりすがり : 2011年09月04日 19:13