koe*_*la1 6 java ajax encoding spring-mvc
我有一个网页,使用Ajax请求希伯来字符串,但字符串返回为"??????"
奇怪的是,当使用JSTL而不是Ajax将相同的字符串插入页面时,它显示正确...
在我的网页上,我正在宣布
<%@ page contentType="text/html" pageEncoding="UTF-8"%>
Run Code Online (Sandbox Code Playgroud)
那是我的控制器:
@RequestMapping("get_label")
public @ResponseBody String getLabel()
{
String str = "?????";
return str;
}
Run Code Online (Sandbox Code Playgroud)
我的ajax请求:
$.ajax({
url: "get_label",
success: function(result)
{
alert(result);
$("#parameter_select label").text(result);
}
});
Run Code Online (Sandbox Code Playgroud)
我有什么想法在这里做错了吗?
n1c*_*las 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);
}
});
Run Code Online (Sandbox Code Playgroud)
香草JS 风格:
xhr.overrideMimeType("text/html; charset=UTF-8")
Run Code Online (Sandbox Code Playgroud)
但另一方面,您需要确定,该服务器也会返回适当的响应.为此,您需要检查以下内容:
为此,您可以使用显式调用方法:
@RequestMapping("get_label")
public @ResponseBody String getLabel(HttpServletResponse response)
{
String str = "?????";
//set encoding explicitly
response.setCharacterEncoding("UTF-8");
return str;
}
Run Code Online (Sandbox Code Playgroud)
或者,这似乎更适合@ResponseBody
和Spring 3.1+:
@RequestMapping(value = "get_label", produces = "text/html; charset=UTF-8")
public @ResponseBody String getLabel(HttpServletResponse response)
{
String str = "?????";
return str;
}
Run Code Online (Sandbox Code Playgroud)
作为结论,我想澄清一点,为了正确处理使用UTF-8编码的AJAX调用,你必须确保: