有个朋友写JSP程序时,在Servlet中取请求参数时出现了乱码,当然,这种乱码问题再简单不过了。由于在JSP中使用了GBK作用页面的编码,那么提交的中文信息自然也会被按着GBK进行编码,为%xx格式的GBK编码。

要解决这个问题可以说是方法多多。最简单的就是使用request.setCharacterEncoding方法设置编码格式,如下面的代码所示:

request.setCharacterEncoding("GBK");

在设置完编码格式之后,就可以直接通过request.getParameter方法来获得请求参数中的中文信息了。当然,为了方便,还可以在过滤器中加入上面的语句,这样所有的Servlet都可以直接使用 request.getParameter方法来获得请求参数中的中文信息了。 除了这两种方法,还可以不使用request.setCharacterEncoding("GBK"),而使用下面的语言来转换编码:

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK");

但为了更快解决这个问题,我就直接告诉这位朋友使用了setCharacterEncoding方法来设置编码。但是说来奇怪,还是出现乱码,没有任何解决问题的迹象。 最郁闷的事就是使用了自己认为100%能解决问题的方法,而这种方法却一点都没起作用。

最后又让朋友试了最后一种方法,说来奇怪,竟然好使了。当然,这也没什么可奇怪的,本来就应该好使,但奇就奇在setCharacterEncoding方法并没有去掉,也就是说,同时使用了下面两条语句,竟然得到了正常的中文请求参数值:

request.setCharacterEncoding("GBK");

String name=newString(request.getParameter("name").getBytes("ISO-8859-1"),"GBK");

System.out.println(name);//正常输出中文请求参数按着常理来说,这是不可能的,既然使用了setCharacterEncoding方法设置成了GBK,再使用new String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK")来转换,得到的应该是?????,不可能是正常的中文,只有将setCharacterEncoding方法去了,以ISO-8859-1格式保存的字符串才可以用ISO-8859-1格式还原,再用GBK重新保存成Java字符串(这一步实际上就是GBK转Unicode)。

但经过仔细思考后,决定看下JSP代码是如何写的。不看不知道,一看吓一跳,原来

在提交时使用的是GET,而未用POST,这当然没什么了不起的,用什么都可以,但对编码就有问题了。自从Tomcat5.x开始,GET和POST方法提交的信息,Tomcat采用了不同的方式来处理编码,对于POST请求,Tomcat会仍然使用request.setCharacterEncoding方法所设置的编码来处理,如果未设置,则使用默认的iso-8859-1编码。而GET请求则不同,Tomcat对于GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码,而这位朋友使用的正好是GET请求,因此,tomcat将会使用iso-8859-1将提交的字节转换成字符串。

解决的方法有两个:

1.  将GET请求改成POST请求,然后就可以使用request.setCharacterEncoding方法设置编码,并使用request.getParameter方法直接获得中文请求参数了。

2.  不用改GET请求,在Servlet中使用如下的代码来得到中文请求参数。

String name=newString(request.getParameter("name").getBytes("ISO-8859-1"),"GBK");综上所述,如果使用了GET请求,则setCharacterEncoding方法不起作用,只能使用上面的代码来解决,而使用POST请求,尽管setCharacterEncoding方法起作用,但使用上面的代码仍然好使(在这时不能使用setCharacterEncoding方法将编码格式设置成非iso-8859-1格式)。因此,如果想让Servlet可以同时处理GET和POST请求中的中文信息,除了判断这两种方法外,还可以使用上面的代码来同时处理这两种请求的中文信息。

笔者建议使用如下的代码来获得中文请求参数:

String name=newString(request.getParameter("name").getBytes("ISO-8859-1"),"GBK");

因为上面的代码是利用了Java的编码能力,对于所有的Web服务器都会有效,而setCharacterEncoding方法是通过Web服务器支持的,并不是所有的Web服务器都会对该方法有很好的支持。

android tomcat乱码问题,Tomcat在处理GET和POST请求时产生的乱码问题相关推荐

  1. linux红帽网页中文乱码解决,【linux学习笔记】安装redhat时中文显示乱码(小方框)解决方法...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 ------------------------------------- 防抽------------------------------------- ...

  2. ide中tomcat乱码_idea tomcat 乱码问题的解决及相关设置

    问题,在idea中出现乱码问题,以前没有的,好像在设置系统代码为utf8之后就出现了,于是尝试了一系列办法,希望这些办法对您有帮助. 先看一下乱码的样式. 设置办法 1.在tomcat Server中 ...

  3. Android手机连接到Tomcat服务器

    本文是转载文章,文章的来源:csdn博客 博主:monkey_study 文章:Android手机连接到TOmcat服务器 博文地址:https://blog.csdn.net/monkey_stud ...

  4. Android客户端与Java tomcat之间HTTPS通讯

    文中涉及到https认证和post传参. 不使用SSL(Secure Sockets Layer)/TLS的HTTP通信就是不加密的通信,所有信息都已明文传播,容易被窃取.篡改或冒充.SSL/TLS协 ...

  5. Android:HttpClient、tomcat支持php、搭建PHP后台

    目的:     创建一个简单的Android项目,并搭建PHP后台,实现Android与PHP之间的通信. 本地环境:     Android Studio3.1.2     Tomcat 7.0.6 ...

  6. idea启动tomcat时日志中文乱码

    idea启动tomcat时日志中文乱码 在idea启动日志时候,中文乱码如下图所示: 解决方案: 在idea指定的tomcat中找到 conf/logging.properties 文件,修改成下面截 ...

  7. 启动tomcat时日志出现乱码

    启动tomcat时日志出现乱码 解决办法:修改tomcat目录下conf文件夹中的logging.properties 把UTF-8修改为GBK即可,文件中有多个UTF-8,要看清楚把java.uti ...

  8. Eclipse配置tomcat服务器及tomcat简介

    一.手动配置tomcat到eclipse tomcat的压缩包资源可以去资源包中下载.(win32和win64都有) 1. 打开eclipse–>Window–>Preferences,按 ...

  9. Tomcat快速入门(Tomcat安装 把一个项目发布到tomcat中 Eclipse配置Tomcat idea配置tomcat)

    文章目录 服务器的概念 服务器 Web服务器软件:接收客户端发送的请求和响应客户端请求. 常见的Web服务器软件 Tomcat安装 win下启动乱码问题解决 Tomcat目录介绍 如何把一个项目发布到 ...

最新文章

  1. 2022-2028年中国耐二甲醚橡胶密封材料行业市场全景调研及发展趋势分析报告
  2. mysql 5.7开启并行复制
  3. java memcmp_memcmp,memicmp函数
  4. Chrome、Edge 合力围剿,Safari 夹缝求生?
  5. 易宝典文章——用ISA 2006标准版发布Exchange 2010的OWA系列之生成Exchange证书申请文件...
  6. 高通宣布与华为达成新专利授权协议,华为砸下18亿美元
  7. 《计算机应用基础实训教程》,《计算机应用基础实训教程》修改稿(文).doc
  8. webpack 打包压缩 ES6文件报错UglifyJs + Unexpected token punc «(», expected punc
  9. 性能优化:缓存使用的秘密
  10. 洪恩机器人课程提示_【重要提示】全国儿童机器人等级考试报名启动!
  11. 混淆的艺术-(苍井空变凤姐)Proguard源码分析(三)Proguard配置解析~上
  12. python实现word批量转pdf
  13. Arduino应用开发——TCP/IP无线传输
  14. 双向迁移图协同过滤GCF的跨域推荐
  15. 【PostgresSQL】对汉字按拼音排序
  16. 空间可分离卷积和深度可分离卷积
  17. Liquibase中利用changelog增加表字段
  18. Web自动化测试-Protractor基础(二)
  19. 推荐一个优秀的c++源代码,TinyXml2
  20. 几款支持GB28181的平台

热门文章

  1. oracle+块头csc,数据块转储及RDBA的转换
  2. 跨域?拒绝说概念(内含demo)
  3. leetcode1017
  4. mssql附加的数据库查询的时候没有搜索权限
  5. Hands-On Unity 2018 x 移动游戏开发教程
  6. NEC中标里斯本智慧城市项目 助力城市整体数字化变革
  7. Python 3 文件和字符编码
  8. 前端工程师现在需要掌握的是什么?
  9. 一个不错的安卓下ssh客户端
  10. JavaEE路径陷阱之getRealPath