これは、デフォルトで AJAX 呼び出しがブラウザのデフォルト エンコーディング (fe ANSI) を使用するために発生します。これをオーバーライドするには、次のことを行う必要があります。
jQueryスタイル- mimeType :
$.ajax({
url: "get_label",
mimeType:"text/html; charset=UTF-8",
success: function(result)
{
alert(result);
$("#parameter_select label").text(result);
}
});
バニラJSスタイル:
xhr.overrideMimeType("text/html; charset=UTF-8")
しかし一方で、そのサーバーも適切な応答を返すことを確認する必要があります。そのためには、次のことを確認する必要があります。
- server.xmlのコネクタ設定にURIEncoding="UTF-8"を追加して、Web コンテナ (つまり、Tomcat) の UTF-8 サポートを追加します。詳細については、これを確認してください。
- 以前の変更が役に立たなかった場合 (そうする必要があります)、サーブレット応答の文字セットもUTF-8であることも確認してください。
これには、メソッドの明示的な呼び出しを使用できます。
@RequestMapping("get_label")
public @ResponseBody String getLabel(HttpServletResponse response)
{
String str = "בדיקה";
//set encoding explicitly
response.setCharacterEncoding("UTF-8");
return str;
}
@ResponseBody
または、 Spring 3.1+ではどちらがより好ましいと思われますか?
@RequestMapping(value = "get_label", produces = "text/html; charset=UTF-8")
public @ResponseBody String getLabel(HttpServletResponse response)
{
String str = "בדיקה";
return str;
}
結論として、UTF-8エンコーディングを使用したAJAX呼び出しを適切に処理するには、次のことを確認する必要があることを明確にしたいと思います。
- web-container はこれを適切にサポートします
- 応答の文字エンコーディングは UTF-8 です
- AJAXリクエストの文字エンコーディングもUTF-8