当我们想要在URL上传递中文参数的时候,我们需要进行URLEncode.code("中文参数"),然后才能在URL上正确的进行传递参数(注意:因为当我们提交表单的时候,表单中的参数也是会自动调用URLEncode.code("中文参数")为我们编码,这样就会产生一个%xy,xy是16进制的数据),所以当我们要在url上传递参数login?userName="中文参数",这事就应该这样写:
resp.sendRedirect("login?userName=" + URLEncoder.encode("犀利哥", "utf-8"));
//只用经过编码的中文才能正确的在url上传递参数。
当我们经过以上处理之后则可以在另一个响应页面获取数据,也就是req.getparameter("userName"),一般我们的做法是很自然的就是直接按照上面的方式去获取参数,然后在解码:
String userName = req.getparameter("userName");
System.out.prinln(URLDecode.code(userName,"UTF-8"));
用以上的方式,想法是很好的,因为我们都是这样想的,在页面的一头去URLEncode.code("中文参数","UTF-8");去编码在接收页面用URLDecode.code("中文参数","UTF-8");去解码,然后都是按照UTF-8的格式去编码和解码,应该可以解码出正确的字符吧!!!但是结果却是这样的:
é????????
是不是很失望,中文乱码!!!
回过头来看看其实我们都错了,其实错在我们都不明白,当我们使用req.getparameter("userName");的时候,服务器已经帮我们解码了,它是怎么解码的呢?
TOMCAT帮我们这样解码了URLDecode.code(userName,"ISO-8859-1")所以我们获得的是一个使用了UTF-8去编码,但是却是以ISO-8859-1
去解码的的文字,然后得出的文字能不是乱码吗?我们req.getparameter("userName");的时候所得到的已经是解码
过后的文字,所以我们再去解码,当然没有任何意义,因为已经不是%xy这种形式的数据,所以我们的解码是无意义的,
(URLDecode.code()只会去解码%xy这样的数据),所以我们打印出来的就是乱码。那好,那要怎么解决呢?
这就是乱码的问题了,怎么解决乱码呢?因为服务器已经帮我们解码,而且是以ISO-8859-1解码的,所以我们要逆向
编码回去获得字节码也就是:
Bytes[] byte = req.getparameter("userName").getBytes("ISO-8859-1")//获得字节码
//然后再根据UTF去解码数据
String userName = new String(byte,"UTF-8" );
System.out.println(userName);
//这样 犀利哥 就出来了!
通过以上步骤,就能正确的解码了,其实get的方式的乱码都是由上面产生的,了解了这个,也就了解了get方式产生乱码
的原因,也就能过顺利的解决get乱码问题。(记住get的方式与URL有关,而URL都要经过URLEncode和URLDecode)
其实对于get方式产生的乱码我们还可以通过更改服务的默认编码解码方式也就是在
- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
- URIEncoding="UTF-8" />
这样以来get传递方式都是以UTF-8编码方式去编码了!
分享到:
相关推荐
getAttribute和getParameter区别 getAttribute和getParameter区别
——getParameter得到的都是String类型的。或者是http://a.jsp?id=123中的123,或者是某个表单提交过去的数据。 ——getAttribute则可以是对象。 ——getParameter()是获取POST/GET传递的参数值; ——getAttribute...
request.getParameter() 和request.getAttribute() 区别
java servlet 请求 时 tomcat request.getParameter 乱码
本篇文章小编为大家介绍,基于request.getAttribute与request.getParameter的区别详解。需要的朋友参考下
getParameter.js 下载 ,用Ajax来获取请求行的参数 ,使用script 标签引入
encType="multipart/form-data" 根据上传不同,主要分两步,可以有效的解决request.getParameter(String s)是null值
在使用 EL 从 scope 中得到参数时可以自动转换类型,因此对于类型的限制更加宽松。 Web 服务器对于 request 请求参数通常会以 String 类型来发送,在得到时使用的 Java 语言脚本就应该是 request.getParameter(“XXX...
JSP用过滤器解决request getParameter中文乱码问题.docx
在Servlet中,通过使用HttpServletRequest对象的getMethod()方法可以判断当前请求的类型是GET还是POST。 Servlet中get和post的使用 在Servlet中,get和post请求可以通过使用不同的方法来处理。例如: ```java ...
解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法 ?
jsp+ajax 发送 GET 请求的方法 本文主要介绍了 jsp+ajax 发送 GET 请求的方法,包含了 Ajax 数据的发送与 JSP 文件的处理技巧。下面是详细的知识点: 一、Ajax 发送 GET 请求 Ajax 发送 GET 请求是通过创建 ...
HTTP:getAttribute和getParameter的区别
String xm = request.getParameter("xm"); String rxsj = request.getParameter("rxsj"); String yx = request.getParameter("yx"); String zy = request.getParameter("zy"); String sf = request.getParameter("sf...
今天跟大家分享几个解决java Web开发中,request.getParameter()获取URL中文参数乱码的解决办法,需要的朋友可以参考下
主要介绍了js获得参数的getParameter使用示例,需要的朋友可以参考下
EL表达式 (详解) EL表达式 1、EL简介 1)语法结构 ${expression} 2)[]与.运算符 EL 提供.和[]两种运算符来存取数据。 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 ...
Cookie [] cookies = request.getCookies(); for(int i=0; i; i++) { Cookie temp = cookies[i]; String key = temp.getName(); String value = temp.getValue(); } 3.隐藏表单域 <input type="hidden" name=...
(1)客户端的数据一般是通过HTTP GET/POST方式提交给服务器,在服务器端用request.getParameter()读取参数时,很容易出现中文乱码现象。 (2)用过滤器解决request中文乱码问题。 (3)代码如下: package my; ...