2007年01月14日

【Java & Ajax】UTF-8 でない HTML での Ajax 通信方式

今参加しているプロジェクトで部分的に Ajax を使用しているのだが,
そこで以下の問題にぶち当たった。

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 オブジェクトに,送受信する文字コードが設定できればいいのに・・・
ラベル:java AJAX
posted by yashawks at 00:26| 東京 ☁| Comment(0) | TrackBack(1) | システム開発日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック

java x Ajaxの文字コード問題について
Excerpt: Technorati タグ: java,filter,プログラム javaでA...
Weblog: ヒビノカテ
Tracked: 2010-02-02 22:16
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。