我有一个网页请求使用Ajax的希伯来文字符串,但该字符串返回为“??????”
奇怪的是,使用JSTL,而不是阿贾克斯插入相同的字符串到页面时,它显示正确...
在我的网页我声明了
<%@ 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);
}
});
任何想法我究竟做错了什么?
这发生在默认情况下使用浏览器的默认编码(FE ANSI),因为AJAX通话。 对于重写此你需要做的:
jQuery的风格 - mime类型 :
$.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支持与添加的URIEncoding = “UTF-8”在server.xml中的连接器设置; 检查此了解更多信息。
- 如果之前的变化没有帮助(虽然它有),还请确保,即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容器正确支持此
- 响应的字符编码是UTF-8
- AJAX请求的字符编码也是UTF-8