1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > IE浏览器url带中文参数导致乱码问题(chrome下正常)

IE浏览器url带中文参数导致乱码问题(chrome下正常)

时间:2020-04-21 04:27:55

相关推荐

IE浏览器url带中文参数导致乱码问题(chrome下正常)

问题:

E浏览器下url带中文请求参数,服务器端使用new String(param.getBytes(“iso-8859-1”), “utf-8”)后仍然会乱码。

但使用chrome浏览器则正常

代码如下:

解决:

使用URLEncoder和URLDecoder对url参数进行编解码。即,在jsp中对“小红”进行URLEncode编码后再传参即可解决。

==================================================================================================================

但会导致另一个很奇怪的问题,想不明白。解决代码如下:

XMLHttpRequestTest.jspfunction getAjax() {var xmlrequest = getXMLHttp();xmlrequest.onreadystatechange = function() {//xmlrequest状态变化,触发函数if(xmlrequest.readyState == 4) {// 4 数据接收完毕if (xmlrequest.status == 200) {alert(xmlrequest.responseText);}}}var username = encodeURI("小红"); //使用urlencoder进行中文的十六进制转码。此时username值为"%E5%B0%8F%E7%BA%A2"xmlrequest.open("GET","${pageContext.request.contextPath}/xmlRequest?username="+username+"&password=123");//xmlrequest.open("GET", "${pageContext.request.contextPath}/xmlRequest?username=小红&password=123");xmlrequest.send(null);}

疑问如下:

XMLHttpRequestTestServlet.javaprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//问题一:jsp中使用了var username = encodeURI("小红");//在jsp页面中打断点查看发现username确实被转码成了"%E5%B0%8F%E7%BA%A2"//但是在此处打断点查看username却不是"%E5%B0%8F%E7%BA%A2",而是"小红",为什么?String username = request.getParameter("username");String password = request.getParameter("password");//解决get方式请求参数乱码username = new String(username.getBytes("iso-8859-1"), "utf-8");password = new String(password.getBytes("iso-8859-1"), "utf-8");//问题二:如果URLEncoder是进行十六进制的转码,//那么jsp页面中使用了encodeURI(),服务器端为什么不需要使用URLDecoder也能输出编码前的中文?//username = URLDecoder.decode(username, "utf-8");//解决响应乱码response.setContentType("text/html;charset=UTF-8");System.out.println(username+" : "+password);response.getWriter().print("get 成功");}

参考/jinks/p/3533640.html后解决上述疑惑。

上述问题原因:url是不支持非ASCII字符的,当地址栏url路径带中文参数时,就会产生乱码。

一般浏览器会自动帮我们进行urlencode的十六进制编码,并且urldecode的解码也会由tomcat帮我们自动完成。

但IE浏览器不会帮我们自动进行urlencode编码。

并且由于tomcat是外国人写的,所以parameter的值是被iso-8859-1编码,需要我们再进行一次utf-8的解码。

即new String(param.getBytes(“iso-8859-1”), “utf-8”);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。