首页 新闻 会员 周边

servlet获取get请求的参数时,中文乱码

0
悬赏园豆:5 [已解决问题] 解决于 2017-01-07 19:31

url是UTF-8的,servlet是GBK编码的,可是我在Servlet中设置了request.setCharacterEncoding("UTF-8");

可是request.getParamete("username")获取用户名还是乱码,不知道为什么?
我尝试设置request.setCharacterEncoding("GBK");时也是乱码,实在不知道哪里出问题了
爱因斯坦不爱物理的主页 爱因斯坦不爱物理 | 初学一级 | 园豆:7
提问于:2017-01-05 20:15
< >
分享
最佳答案
0

以什么方式提交的?get,post? setCharacterEncoding只对post内容有效,get的话看看浏览器的编码是什么。servlet是gbk的,源码的编码格式不影响运行吧,都是英文。

收获园豆:5
创心coder | 小虾三级 |园豆:736 | 2017-01-05 23:21
其他回答(4)
0

用户名密码是url还是body中,在body需要html Encode (decode),在url需要url encode(decode)。然后才是对应的编码!

花飘水流兮 | 园豆:13560 (专家六级) | 2017-01-05 20:30

是ur,不过url中文显示正常,不是什么%之类的,这样也要encode和decode吗 

0

new string(byte,utf-8)

让我发会呆 | 园豆:2929 (老鸟四级) | 2017-01-05 20:48
0

将参数编码一下,就是HtmlEncode,我的站上有这个工具,你可以去试下。http://www.ofmonkey.com/

独孤飞 | 园豆:283 (菜鸟二级) | 2017-01-06 08:59
0

 // 解决中文乱码问题

String encode = "UTF-8";
if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0
   || request.getHeader("User-Agent").toUpperCase().indexOf("TRIDENT") > 0 ) {// IE浏览器
 encode = "GBK";
 }
String param1 = new String(request.getParameter("param1").getBytes("ISO-8859-1"), encode);
String param2 = new String(request.getParameter("param2 ").getBytes("ISO-8859-1"), encode);

以上是针对兼容不同浏览器的乱码(目前只测试过:IE、360、google、mozillaFireFox);

如果您用的是tomcat,请在tomcat的server.xml配置文件中的connector元素标签添加URIEncoding = "UTF-8"

或者设置 request.setCharacterEncoding("UTF-8"),再修改tomcat的connector元素也行

sky580 | 园豆:202 (菜鸟二级) | 2017-01-06 10:30

我被这段代码坑了100遍了。不能解决所有问题。只能说一部分可以。

支持(0) 反对(0) wangjinming | 园豆:569 (小虾三级) | 2017-01-06 11:33

@wangjinming: 能把代码截个图出来看看吗

支持(0) 反对(0) sky580 | 园豆:202 (菜鸟二级) | 2017-01-06 11:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册