看了好多篇文章,最终仍是看到一篇,解决了本身的问题.
ajaxpost.js ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() servlet ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 分析:当调用request.getParameter()函数时,会自动进行一次URI的解码过程,调用时内置的解码过程会致使乱码出现。而URI 编码两次后,request.getParameter()函数获得的是原信息URI编码一次的内容。再用可控的解码函数 java.net.URLDecoder.decode()就可解出原始的正确的信息。 |
方法三(还能够)javascript
AJAX提交数据乱码,返回数据乱码的解决方案
随着AJAX的流行,乱码问题也开始困扰着许多刚开始使用它的程序员,幸亏我以前对JSP乱码有过一点研究,在遇到AJAX后,并无给我带来多大的困扰,在此将个人一些心得共享给你们。
万变不离其宗,AJAX的乱码问题天然跟编码有关了,其实不少人跟我同样想到了对文件编码进行设置,而且在接数据时设置了requet的编码,在返回的数据时设置了response的编码一切都觉得会很顺利,但是这一切都是徒劳无功的,讨厌的乱码再一次出如今你眼前。在你试了N多种方法,包括JS自身的escape,unescape方法后,你发现乱码仍然猖狂地出如今屏幕上。
其实在试过这N多方法后,不少人都没发现,解决的方法其实很简单,并且其答案就在咱们以前处理的JSP乱码之中。让咱们先看一下AJAX的经典请求代码
最后别忘了在返回数据时也设置上: html
经过前面的说明,不知道你如今看出端倪了没有。不知道是受了网上教程的影响仍是其它方面影响,setRequestHeader并是万年不变的,也没人想过去改它,而问题就正好出在这个地方。回想一个JSP页面内容的编码设置,其中有这么一节: java
如今知道问题了吧,因此咱们要把第二句代码改成: 程序员
是否是很简单,一点都不麻烦呢?
若是要问为何的话,其实咱们能够把xmlhttp当作是一个临时页面,它由浏览器动态生成,主要做用是在后台得到请求的数据(能够当作是一个高级的iframe)。因此对于普通页面设置的编码,对它也要一样设置。而在servlet中返回数据为何要设置contentType和encoding其道理也是同样的。众所周知,jsp的最后形态就是servlet,而jsp页首设置的那个内容其实也就是让生成的servlet中生成这么两句话:
ajax
而pageEncoding则是跟jvm说明了这个页面的内容要使用什么编码保存(这跟以后生成的CLASS有关系)。因此在servlet设置response的编码也是理所固然的了。浏览器
方法四(很保险,但代码量很大,是个不错的选择.)服务器
在发送ajax请求以前,对参数escape()两次( 例:name=escape(escape("张三")); ),而后再发送请求到服务器,服务器接收参数后,对参数unescape(),就能够获得正确的参数( 例:String name=unescape(request.getParameter("name")); ).cookie
附java版的unescape实现并发
附:prototype ajax乱码解决方法(已通过测试可行)
prototype对传递的参数都进行了编码转换工做,每一个传递值经过encodeURIComponent 进行了处理.编码会被转换成utf-8,在后台获取request时,应该统一使用request.setCharacterEncoding("UTF-8")对request设置编码,而没必要管页面的编码格式是什么.若是使用post方法进行传递数据,则会自动执行:
request.setHeader('Content-type','application/x-www-form-urlencoded').确保传递数据编码格式的正确. app