关于AJAX/GET请求乱码的问题
2015-01-05 17:23
405 查看
AJAX的GET请求参数中若存在中文等非“ASCII字符”时,服务端在解析请求参数时,如果仅通过request.getParameter(参数key)方法获取参数值,而不进行相关处理,获得值中就会出现乱码的问题。如以下请求:
GET请求时
POST请求时
从上面的示例可以看到:发送get请求时,参数taskName的值是“任务1”,但是java代码中获取的值确实乱码,而发送post请求时,则不存在乱码的问题,为什么会出现这种情况呢?
因为:
(1) 使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器,如/test/demo.jsp?name1=value1&name2=value2,而在url中的字符只能是ASCII码,对于非ASCII码的字符,将无法表示,所以就会出现乱码。
(2) 使用POST方法时,查询字符串在POST请求的Header中存在,和HTTP请求一起发送到服务器,没有只能是ASCII码的限制。
了解了HTTP GET请求和POST请求的区别之后,如何解决GET请求是的乱码问题呢?
方法一、客户端不做处理,服务端转码
方法二、客户端进行encodeURI转码,服务端解码
js:
java:
方法三、客户端进行encodeURIComponent转码,服务端解码
js:
GET请求时
param["taskName"] = "任务1"; $.ajax({ url : nfmTools.remoteAddress + "doGET", data : param, cache : false, async : false, type : 'GET', dataType : 'json', success : function(rsp) { });
@RequestMapping(value = "doGET", method = RequestMethod.GET) @ResponseBody public void doGet(HttpServletRequest request){ String name = request.getParameter("taskName"); System.out.println(name); }
POST请求时
param["taskName"] = "任务1"; $.ajax({ url : nfmTools.remoteAddress + "doGET", data : param, cache : false, async : false, type : 'POST', dataType : 'json', success : function(rsp) { });
@RequestMapping(value = "doPost", method = RequestMethod.POST) @ResponseBody public void doPost(HttpServletRequest request){ String name = request.getParameter("taskName"); System.out.println(name); }
从上面的示例可以看到:发送get请求时,参数taskName的值是“任务1”,但是java代码中获取的值确实乱码,而发送post请求时,则不存在乱码的问题,为什么会出现这种情况呢?
因为:
(1) 使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器,如/test/demo.jsp?name1=value1&name2=value2,而在url中的字符只能是ASCII码,对于非ASCII码的字符,将无法表示,所以就会出现乱码。
(2) 使用POST方法时,查询字符串在POST请求的Header中存在,和HTTP请求一起发送到服务器,没有只能是ASCII码的限制。
了解了HTTP GET请求和POST请求的区别之后,如何解决GET请求是的乱码问题呢?
方法一、客户端不做处理,服务端转码
String content = new String(request.getParameter("xxxx").getBytes("ISO-8859-1"), "UTF-8");
方法二、客户端进行encodeURI转码,服务端解码
js:
var param = {}; var name = "任务1"; param["name"] = encodeURI(name); $.ajax({ url : remoteURL, data : param, cache : false, async : false, type : 'GET', dataType : 'json', success : function(rsp) { });
java:
public boolean doGET(HttpServletRequest request){ String name = request.getParameter("name"); System.out.println(name); name = URLDecoder.decode(name, "UTF-8"); System.out.println(name); }打印结果为:
%E4%BB%BB%E5%8A%A11 任务1
方法三、客户端进行encodeURIComponent转码,服务端解码
js:
var param = {}; var name = "任务1"; param["name"] = encodeURIComponent(name); $.ajax({ url : remoteURL, data : param, cache : false, async : false, type : 'GET', dataType : 'json', success : function(rsp) { });java:
public boolean doGET(HttpServletRequest request){ String name = request.getParameter("name"); System.out.println(name); name = URLDecoder.decode(name, "UTF-8"); System.out.println(name); }
相关文章推荐
- js中关于get请求(包括异步以及直接用过网页连接请求),后台接收乱码问题
- Spring Tomcat Post Get 请求参数有中文时出现乱码或+号变空格等关于编码的问题
- jsp中 ajax的get请求的中文乱码问题的解决方法
- jsp中 ajax的get请求的中文乱码问题的解决方法
- 关于spring mvc ajax请求乱码问题 StringHttpMessageConverter
- 关于Get,Post请求中文乱码问题有效解决方法
- Ajax发起GET请求的乱码问题
- Ajax的get请求在IE浏览器中乱码问题的解决方案
- 关于Ajax请求中传输中文乱码问题的解决方案
- 关于ajax get方式请求 url地址参数怎么变成空了的问题
- ajax的get请求的中文乱码问题,(jsp 的pageEncoding ="GBK")
- 关于ajax的get提交中文乱码问题探究及解决办法
- 关于spring mvc ajax请求乱码问题 StringHttpMessageConverter
- dhl:ajax无法跨域改用getJSON(解决服务器返回json数据中文为乱码的问题$.ajaxSetup({ scriptCharset: "utf-8" , contentType: "application/json; chars)
- asp下关于Ajax-GB2312乱码的问题
- ajax碰到请求url过长的问题! ajax中get和post的区别
- 关于java、jsp、servlet、ajax乱码问题
- 老问题:JSP,AJAX,UTF-8,Get,乱码!
- jquery.ajax GET 传递参数 乱码问题
- Tomcat在处理GET和POST请求时产生的乱码问题