7

Ajax を使用してヘブライ語の文字列を要求する Web ページがありますが、文字列は「??????」として返されます。

奇妙なことに、Ajax ではなく JSTL を使用して同じ文字列をページに挿入すると、正しく表示されます...

私のWebページで私は宣言しています

<%@ page contentType="text/html" pageEncoding="UTF-8"%>

それが私のコントローラーです:

@RequestMapping("get_label")   
public @ResponseBody String getLabel()
{
   String str = "בדיקה";

   return str;
}

そして私のajaxリクエスト:

$.ajax({
    url:    "get_label",
    success:    function(result)
    {
        alert(result);
        $("#parameter_select label").text(result);
    }
});

ここで何が間違っているのですか?

4

1 に答える 1

15

これは、デフォルトで 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")

しかし一方で、そのサーバーも適切な応答を返すことを確認する必要があります。そのためには、次のことを確認する必要があります。

  1. server.xmlのコネクタ設定にURIEncoding="UTF-8"を追加して、Web コンテナ (つまり、Tomcat) の UTF-8 サポートを追加します。詳細については、これを確認してください。
  2. 以前の変更が役に立たなかった場合 (そうする必要があります)、サーブレット応答の文字セットも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
于 2013-03-04T15:40:17.033 に答える