Firefox で Ajax 通信するときに文字化け発生
ここ数日ハマってしまっている問題が Firefox 3.5 で Ajax 通信したときに日本語文字列が文字化けしてしまってサーバサイドで正常に処理ができないというもの。
環境はこのような感じです。
- クライアント
- Windows XP/2000
- Firefox 3.5.x
- jQuery 1.3.2
- サーバ (自マシン環境)
- Windows XP/2000
- Java 1.5 系
- JBoss
- サーバ (開発環境)
現象
端的に言うとブラウザ上の入力項目に日本語を入れ、その内容を jQuery.ajax() でサーバにリクエストするとその内容が化けてしまうというものです。しかしこの化け方が奇妙で、これまでに見たことがありません。例えば、入力項目に「あああああ」と入れてリクエストすると「BBBBB」となってしまうのです。「あいうえお」だと「BDFHJ」。何か規則性がありそう?
調査
まずは jQuery.ajax() にて JSON 変換してリクエストしている部分に着目し、Firebug でリクエストヘッダを見てみました。すると、その時点では文字は化けていませんでした。
次に jQuery.ajax() のオプションを見直してみたところ、あることがわかりました。このアプリケーションではすべての Ajax リクエストを POST で行っているのですが、試しに GET に変更してみたところ文字化けしないのです。入力項目が複雑で、かつ送信するデータが非常に大きいため POST メソッドで送信せざるを得ないのです。
と、まぁまだ完全に原因を突き詰められているわけではなく、解決方法も見いだせていないのでこれからしばらくハマり続けなければなりません。もし何かわかったらまたエントリを書きたいと思います。