第一种方法:
var url = encodeURI(url);前端js先编码一次,
后台:String test=newString(request.getParameter(“test”).getBytes(“iso8859-1″),”UTF-8”);
先解码还原成byte数组, 再用utf-8 解码(另外也可以修改容器的配置文件, 让容器在遇到 GET 提交的参数时,使用 UTF-8编码. )
此时test已成功解码不出现乱码问题
第二种方法是:
前端JS两次编码:var url = encode(encodeURI(url));
后台 String test=URLDecoder.decode(request.getParameter(“test”),”UTF-8″);
如果只进行一次encodeURI,得到的是UTF-8形式的URL,服务器端通过request.getParameter()解码查询参数(通常是iso-8859-1)就会得到乱码。
进行两次encodeURI,第一次编码得到的是UTF-8形式的URL,第二次编码得到的依然是UTF-8形式的URL,但是在效果上和第一次进行一次UTF-8编码(此时全部转换为ASCII字符,没有多字节字符了),第二次进行一次iso-8859-1编码是一样的.
因为对英文字符来说, UTF-8编码和ISO-8859-1编码的结果相同。在服务器端,
首先通过request.getParameter()自动进行第一次解码(可能是gb2312,gbk,utf-8,iso-8859-1等字符集,对结果无影响)得到Ascii字符,然后再使用UTF-8进行第二次解码,通常使用Java.NET.URLDecoder(“”,”UTF-8″)方法。
附别人的讲解:
客户端发送的是请求头,而参数会根据你当前页面的编码方式进行编码之后发送给服务器
如果是utf-8,那就会根据utf-8进行编码发送给服务器.
如果是jsp文件可以用page指令的contentType属性来设置显示的编码方式.
html文件可以利用<meta>标签模拟请求消息头
而tomcat服务器是默认采用iso-8859-1来对请求消息进行解码的,如果前后不一就很容易出现乱码问题.
如果是post请求只需要设置request.setCharacterEncoding()与请求消息编码前的编码方式一样就可以.
如果是get请求,tomcat默认的是用iso-8859-1来进行解码, 此时request.setCharacterEncoding()不起作用,可以在tomcat的server.xml的Connector元素的useBodyEncodingForURI=”true”使得起作用