这是因为 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")
但另一方面,您需要确保该服务器也返回适当的响应。为此,您需要检查以下内容:
- 添加对 web 容器(即 Tomcat)的 UTF-8 支持,并在server.xml中为您的连接器设置添加URIEncoding="UTF-8";检查此以获取更多信息。
- 如果之前的更改没有帮助(尽管它必须这样做),还请确保该 servlet 响应的字符集也是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