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

问题:

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

但使用chrome浏览器则正常


代码如下:


IE浏览器url带中文参数导致乱码问题(chrome下正常)_第1张图片

解决:

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

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

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

XMLHttpRequestTest.jsp
function 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.java
protected 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 成功");
}

参考http://www.cnblogs.com/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”);



你可能感兴趣的:(BUG工厂)