プロが教える店舗&オフィスのセキュリティ対策術

Ajax+Servletで"I"、"II"等が文字化けしてしまいます。

以下のようにajaxを使いserver側のservletへアクセスしています。

xmlhttp = this.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Msxml2.XMLHTTP");

//コールバック関数の登録
xmlhttp.onreadystatechange = display;
xmlhttp.open('POST','Test',true);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send(null);

フトントの画面はJSPで
<%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-31J">

で定義しています。
サーブレットはpostgresのDBから項目を取得し、htmlを返却しています。
返却したhtmlをDOMのinnterHTMLを使い、画面を書き換えています。

response.setContentType("text/html; charset=Windows-31J");

servletからhtmlを返却する際、上記のようにWindows-31Jで返却すると、javascriptで"xmlhttp.responseText"の所で
"ランタイムエラーが発生しました。デバックしますか 行107 c00ce56eの為、操作を完了できませんでした。"
とエラーが出てしまいます。

response.setContentType("text/html; charset=shift-jis");
出力する際、上記のようにShift-jisで返却すると、エラーは発生しないのですが、"I"、"II"等が文字化けしてしまいます。

何か解決策ありますでしょうか。
宜しくお願いします。

A 回答 (1件)

"Windows-31J" JavaScript



でググると、参考URLがヒットして、
> IE の場合だけ、Windows-31J の代わりに csWindows31J を利用します。
だそうです。

余談ですが、"Windows-31J" は "cp932" と同義で、IANA で定義された「MS方言のSJIS」を意味する文字コード名です。 にもかかわらず、"Windows-31J"を「未知の文字コード」と扱うMS製品が多いのは確信犯という気がしてなりません。

# こんな事を書くと、またマイクロソフト擁護派から反発を喰らうんでしょうが、書かないと状況が良くならない...

参考URL:http://d.hatena.ne.jp/kusakari/20070720/1184928455
    • good
    • 0
この回答へのお礼

うぉぉ~!ドンピシャです。
解決できました。
大変助かりました!有難うございました。

お礼日時:2009/02/12 20:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!