22時57分36秒 [Perl/CGI]
文字コードをUTF-8にしてCGIを作成してたんですけども、CGIで生成した入力フォーム(HTML)から日本語文字列を入力させると、必ず化けてしまう問題に遭遇。
ASCII文字に限定して入力させると、問題なくCGIは動作するので、入力部分の問題でしょう。実はとっても簡単な箇所のミスだったんですけど、なかなか原因が分かりませんでした。
このCGI、最初はSHIFT-JISで作ってたんです。
でも、XML::Simpleモジュールを使ってXMLを操作する上では、最初から全部UTF-8で扱ってる方が楽そうな気がしたので、途中でUTF-8に変えたんです。
最初は、「基本的にはSHIFT-JISで、XMLを扱うときだけUTF-8に変換」みたいなややこしいことをしかけたんだけど、「それなら最初からUTF-8にすればいいんでは…」と思って、全部UTF-8に書き換えたんですよね。
そんなことがあったので、何か文字列の扱い方がおかしいのかとか、エンコード関係の部分に問題があるのか?とか、余計なとこばっかり見ていたのでした。^^;;;
いろいろうなった結果、判明した原因は、とても簡単なとこ。
CGIからの出力に使っている文字コードはUTF-8なので、(CGIの出力結果を)ブラウザに表示させた場合も、エンコードの表示は「UTF-8」になっていなければなりません。
がー。
よく見ると、ブラウザは「西ヨーロッパ言語(ISO-8859-1)」で表示してました。
なるほど、多バイト文字を許さない文字コードだとして解釈すれば、当然、日本語文字列を使うと化けますね。そんな状態でフォームから入力された日本語文字列を扱うと、いろいろおかしなことになりそうです。
UTF-8で出力してるのに、ブラウザがISO-8859-1だと解釈しちゃった原因は...
CGIでヘッダを出力するときに、
…とだけ書いていたため。(^_^;)
文字コードも付加しないとダメですね。
…こうして、文字コードがUTF-8であるようにヘッダを出力すれば解決でした。(^_^;)
ううーん。
ずいぶんな時間を消費してしまった。^^;
この日記へのコメントはお気軽に! コメント数:0件
(前の記事) « Borland Developer Studio バージョンアップの案内が
前後のエントリ
< 旧 / 新 >
コメント数: 0件