AJAX传值中文乱码解决方法
2011-11-28 09:24
531 查看
AJAX传值时采用的是UTF-8编码格式,客户端中文字符传输到服务器端时,如果服务器编码格式或者所采用的MVC框架的编码格式不是UTF-8,则很可能会出现中文乱码。解决办法如下:
客户端用js函数encodeURI()对中文字符进行两次编码,服务器端采用URLDecoder类对客户端传输过来的中文字符进行UTF-8格式的解码。示例:
客户端代码:
Java代码
$.ajax({
type: "post",
url: "createNewGroup.action",
data:"name="+encodeURI(encodeURI("张三")),
success: function(msg){
alert(msg);
}
});
服务器端代码:
Java代码
String name = URLDecoder.decode("客户端传输过来的中文字符","UTF-8");
服务器端往客户端传输中文字符出现乱码时,服务器端可采用URLEncoder类对中文字符进行UTF-8格式的编码。客户端采用js函数decodeURI()对服务器端传输过的中文字符进行两次解码。
当服务器端传输的是一个json串时,且不可对整个json串进行UTF-8格式的编码(编码后的json串有可能不再具有json原有格式),可采用JsonValueProcessor接口和JsonConfig类对json串中的value进行单独编码。
示例代码:
Java代码
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(String.class,
new JsonValueProcessor(){
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
return process(value);
}
public Object processObjectValue(String key, Object value,
JsonConfig jsonConfig) {
return process(value);
}
/**
* process
* @param value
* @return
*/
public Object process(Object value) {
try {
if (value instanceof String) {
return URLEncoder.encode(value.toString(),"UTF-8");
}
return value == null ?"" : value.toString();
} catch (Exception e) {
return "";
}
}
});
JSONArray json = JSONArray.fromObject("[{name:\"张三\";age:\12\";sex:\"男\"}]",
jsonConfig
); //编码后的json串
客户端使用函数decodeURI()再对json串中的value值进行两次解码即可。
在浏览器端使用XMLHttpRequest对象向服务器端传送中文参数,如果不在浏览器端和服务器端进行处理时,会出现中文乱码问题.针对这种问题,有很多的解决办法,但往往都是在IE下可以正常显示中文,在其他浏览器下(比如FireFox)却仍然是乱码.在FireFox下解决了乱码问题,但回到IE下访问却出现了乱码问题.所以针对要在目前流行的各种浏览器下解决中文乱码问题,才能使编写的Web程序变得通用.
针对这种问题的解决方案,我总结大致有两种:
一,在浏览器端对要传递的中文参数进行编码处理.代码如下:
xmlhttp.open("POST","AjaxServlet",true); //请求参数初始化
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //因为请求方式为POST,所以这里要设置请求头.(如果请求方式为GET,此句代码可以省略)
xmlhttp.send("name="+encodeURI(encodeURI("中国"))); //向服务器端发送参数
在服务器端代码:
PrintWriter out = response.getWriter(); //得到response的输出流对象
String name1 = request.getParameter("name"); //得到KEY为"name"的请求参数
String name = URLDecoder.decode(name1,"utf-8"); //对得到的参数进行解码
out.print(name); //向浏览器端发送数据
二,在浏览器端对要传递的中文参数进行编码处理.代码如下:
xmlhttp.open("POST","AjaxServlet",true); //请求参数初始化
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //因为请求方式为POST,所以这里要设置请求头.(如果请求方式为GET,此句代码可以省略)
xmlhttp.send("name="+encodeURI("中国")); //向服务器端发送参数
在服务器端代码:
PrintWriter out = response.getWriter(); //得到response的输出流对象
String name1 = request.getParameter("name"); //得到KEY为"name"的请求参数
String name = new String((name1.getBytes("ISO-8859-1")),"UTF-8"); //对得到的参数进行解码
out.print(name); //向浏览器端发送数据
以上两种方法,在使用XMLHttpRequest对象传递中文参数时,乱码问题可以在任意浏览器下解决,正确显示中文.
客户端用js函数encodeURI()对中文字符进行两次编码,服务器端采用URLDecoder类对客户端传输过来的中文字符进行UTF-8格式的解码。示例:
客户端代码:
Java代码
$.ajax({
type: "post",
url: "createNewGroup.action",
data:"name="+encodeURI(encodeURI("张三")),
success: function(msg){
alert(msg);
}
});
$.ajax({ type: "post", url: "createNewGroup.action", data:"name="+encodeURI(encodeURI("张三")), success: function(msg){ alert(msg); } });
服务器端代码:
Java代码
String name = URLDecoder.decode("客户端传输过来的中文字符","UTF-8");
String name = URLDecoder.decode("客户端传输过来的中文字符","UTF-8");
服务器端往客户端传输中文字符出现乱码时,服务器端可采用URLEncoder类对中文字符进行UTF-8格式的编码。客户端采用js函数decodeURI()对服务器端传输过的中文字符进行两次解码。
当服务器端传输的是一个json串时,且不可对整个json串进行UTF-8格式的编码(编码后的json串有可能不再具有json原有格式),可采用JsonValueProcessor接口和JsonConfig类对json串中的value进行单独编码。
示例代码:
Java代码
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(String.class,
new JsonValueProcessor(){
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
return process(value);
}
public Object processObjectValue(String key, Object value,
JsonConfig jsonConfig) {
return process(value);
}
/**
* process
* @param value
* @return
*/
public Object process(Object value) {
try {
if (value instanceof String) {
return URLEncoder.encode(value.toString(),"UTF-8");
}
return value == null ?"" : value.toString();
} catch (Exception e) {
return "";
}
}
});
JSONArray json = JSONArray.fromObject("[{name:\"张三\";age:\12\";sex:\"男\"}]",
jsonConfig
); //编码后的json串
JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registerJsonValueProcessor(String.class, new JsonValueProcessor(){ public Object processArrayValue(Object value, JsonConfig jsonConfig) { return process(value); } public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { return process(value); } /** * process * @param value * @return */ public Object process(Object value) { try { if (value instanceof String) { return URLEncoder.encode(value.toString(), "UTF-8"); } return value == null ? "" : value.toString(); } catch (Exception e) { return ""; } } }); JSONArray json = JSONArray.fromObject("[{name:\"张三\";age:\12\";sex:\"男\"}]", jsonConfig ); //编码后的json串
客户端使用函数decodeURI()再对json串中的value值进行两次解码即可。
在浏览器端使用XMLHttpRequest对象向服务器端传送中文参数,如果不在浏览器端和服务器端进行处理时,会出现中文乱码问题.针对这种问题,有很多的解决办法,但往往都是在IE下可以正常显示中文,在其他浏览器下(比如FireFox)却仍然是乱码.在FireFox下解决了乱码问题,但回到IE下访问却出现了乱码问题.所以针对要在目前流行的各种浏览器下解决中文乱码问题,才能使编写的Web程序变得通用.
针对这种问题的解决方案,我总结大致有两种:
一,在浏览器端对要传递的中文参数进行编码处理.代码如下:
xmlhttp.open("POST","AjaxServlet",true); //请求参数初始化
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //因为请求方式为POST,所以这里要设置请求头.(如果请求方式为GET,此句代码可以省略)
xmlhttp.send("name="+encodeURI(encodeURI("中国"))); //向服务器端发送参数
在服务器端代码:
PrintWriter out = response.getWriter(); //得到response的输出流对象
String name1 = request.getParameter("name"); //得到KEY为"name"的请求参数
String name = URLDecoder.decode(name1,"utf-8"); //对得到的参数进行解码
out.print(name); //向浏览器端发送数据
二,在浏览器端对要传递的中文参数进行编码处理.代码如下:
xmlhttp.open("POST","AjaxServlet",true); //请求参数初始化
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //因为请求方式为POST,所以这里要设置请求头.(如果请求方式为GET,此句代码可以省略)
xmlhttp.send("name="+encodeURI("中国")); //向服务器端发送参数
在服务器端代码:
PrintWriter out = response.getWriter(); //得到response的输出流对象
String name1 = request.getParameter("name"); //得到KEY为"name"的请求参数
String name = new String((name1.getBytes("ISO-8859-1")),"UTF-8"); //对得到的参数进行解码
out.print(name); //向浏览器端发送数据
以上两种方法,在使用XMLHttpRequest对象传递中文参数时,乱码问题可以在任意浏览器下解决,正确显示中文.
相关文章推荐
- jsp,ajax,json,servlet前后台传值中文乱码解决方法
- jquery的ajax用serialize传值,后台接受,中文乱码解决方法
- jquery的ajax()函数传值中文乱码解决方法介绍
- AJAX中文传值乱码问题解决方法
- ajax()函数传值中文乱码解决方法介绍
- jquery的ajax()函数传值中文乱码解决方法介绍
- AJAX中文传值乱码问题解决方法
- AJAX中文传值乱码问题解决方法
- jquery的ajax()函数传值中文乱码解决方法介绍
- jquery的ajax()函数传值中文乱码解决方法介绍
- jquery的ajax()函数传值中文乱码解决方法介绍
- jquery的ajax()函数传值中文乱码解决方法介绍
- jquery的ajax()函数传值中文乱码解决方法介绍
- 遇到AJAX中文乱码问题终极解决方法
- jquery.ajax的url中传递中文乱码问题的解决方法
- jquery的 ajax返回值为中文时乱码解决方法
- Ajax传递中文参数到后台乱码的有效解决方法
- ajax中文乱码解决方法
- Ajax通过POST方法发送中文信息乱码解决
- AJAX在GET中文的时候解决乱码的方法