そこで以下の問題にぶち当たった。
XMLHttpRequest オブジェクトで 全角文字を POST 送信したら,
Java 側の Unicode 文字が化ける
原因は,XMLHttpRequest オブジェクトが送信するのが‘UTF-8’の文字なのに対し,サーバ側の文字エンコーディング設定フィルタが,ブラウザから送られてきた文字コードが‘Windows-31J’として処理をしていたため。
なぜサーバ側の文字エンコーディングフィルタが‘Windows-31J’を設定していたかというと,ブラウザに表示する HTML の文字コードが‘Windows-31J’だから。
つまり通常の HTML フォームからの POST 送信時は‘Windows-31J’で送られるためだ。
そこで以下の対策を取った。
・XMLHttpRequest オブジェクトで POST 送信するとき,リクエストヘッダに Ajax 通信であることをサーバ側に認識させるためのフラグをセット
・文字エンコーディングフィルタでは,リクエストヘッダに Ajax 通信フラグがあったら‘UTF-8’を文字エンコーディング設定する
上記対策により,問題は解決した。
Web 上で公開されている Ajax を利用しているサイトって,ページ自体の文字コードが‘UTF-8’だったりするが,今回のプロジェクトのように‘Windows-31J’でページを作成する場面って多いと思う。
そうなると,2つの文字コードに神経使うことになるんだよねぇ。
XMLHttpRequest オブジェクトに,送受信する文字コードが設定できればいいのに・・・