有关于tomcat的乱码问题

这几天项目中涉及到了编码问题,收到的请求中出现中文乱码现象。应为我们的项目中用的是 UTF-8 编码格式,而对方起请求我们的时候用的是gbk编码,我们在本机eclipse中运行,修改了编码方式,先以gbk方式解码,然后再回去请求字段,此时中文字段不再是乱码,可是放到了线上,收到的请求仍然是乱码,这是问题就出现了,本地能够正常运行,线上却仍然是乱码。那问题又在那呢?会不会是已经存在的过滤器的影响呢?随后我们又添加了过滤器, 字符集设定为gbk,在本地运行,进入过滤器后,先采用iso-8859-1编码(因为tomcat默认采用此编码方式进行编码),然后再采用gbk编码,可以获得正确的中文字段。随后再放到线上,乱码问题还是存在,这就伤脑筋了,真正的问题出现在哪了呢?这个时候再到线上的tomcat配置文件conf/server.xml中一看,哭了,线上的tomcat和我们本地的配置不一样,线上的设置了URIEncoding="UTF-8",这样一来tomcat就会以 UTF-8编码来处理get请求了,而本地种没有设置这个字段,则是已tomcat默认编码iso-8859-1来进行处理,这个时候只要把线上的 URIEncoding="UTF-8"设置删除就可以了。
          解决了一个问题就来了另一个问题。因为项目中的所有jsp页面的默认编码方式都是 UTF-8,如果把tomcat的编码方式从 UTF-8改为原来默认的 iso-8859-1,再遇到项目本地get请求的时候,如果请求中存在中文字符,这就会出现中文乱码,相对来说解决这个问题就方便多了,至少我们知道了问题出现在了哪里了。     
          (1)、我们可以把请求中出现中文的jsp请求改为post,这样在过滤器中会进行 UTF-8编码。
          (2)、我们可以在controller中直接把接受到的请求先以iso-8859-1,编码,再进行 UTF-8编码复原中文字符,即  checksearch  =  new  String(  checksearch .getBytes( "ISO-8859-1"  ),  "UTF-8" ) 。这两个可以是情况而用。至此编码问题解决完毕。
          到这里还有一个问题需要注意,在我们自动解压的tomcat中,默认编码是ISO-8859-1,而有些系统如Linux自带的tomcat中,存在URIEnciding的字符设置,这个需要提醒一下大家。
          最后总结一下我自己学习到关于项目中编码的使用。 (1)、 Tomcat的URIEncoding默认是ISO-8859-1,可以根据项目需求来进行设定编码方式,配合controller,解决包含中文请求以get方式提交有可能出现的乱码问题。   (2)、 添加过滤器, 设定编码为utf-8,解决请求以post方式提交的乱码问题。
     
参考资料:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值