javaWeb解决中文乱码的一点小总结

①enctype="multipart/form-data"  上传文件使用的表头,内容input等以二进制传递,可以一定程度上避免表单提交中文乱码(针对的是前后端编码一致的情况)。

②<constant name="struts.i18n.encoding" value="gbk" />  

Struts2的上述标签,可以设置编码格式,针对的是post请求。

相当与request.setCharacterEncoding("GBK"); 

③关于请求方式。Get请求和post请求的区别及说明。

1. Get请求为url请求方式,携带的参数会在url后边以?Name=张三&age=18这种形式存在。如果包含中文,由于浏览器无法传递中文,需要先进行编码,这时候经历了浏览器编码----》服务器中间件解码的过程。因为没有指定请求头的编码格式,服务器中间件默认是用iso-8859-1编码进行解码的,此时后端可通过 new String(aa.getbytes(iso-8859-1),’”gbk)等方式重新组合编码获取正确的编码格式。

对于单独的url加参数的请求方式(非表单提交),我们可以将中文参数进两次encodeURI,第一次编码得到的是UTF-8形式的URL,第二次编码得到的依然是UTF-8形式的URL,但是在效果上相当于首先进行了一 次UTF-8编码(此时已经全部转换为ASCII字符),再进行了一次iso-8859-1编码,因为对英文字符来说UTF-8编码和ISO- 8859-1编码的效果相同。后端在用常规接收接收的时候web中间价会自动进行一次解码,即用ISO- 8859-1进行了解码,然后我们在用URLDecoder.decode(aa,’”gbk)即可解码为正确的中文。

对于tomcat来说,我们可以在server.xml的<Connector port 中添加URIEncoding="gbk" 标签来进行设置tomcat的默认解码格式(紧针对get方式有效),weblogic也有相似的配置。 tomcat还有一个标签:useBodyEncodingForURI="true"添加的位置和上边相同,但是并不意味着这两个标签可以同时使用。useBodyEncodingForURI="true"标签告诉tomcat解码的时候用请求体指定的编码(即post请求编码)格式进行get请求的解码,此时适用post请求解决中文乱码问题。

2. 对于post请求来说,最常用的即:

request.setCharacterEncoding("gbk")

response.setCharacterEncoding("gbk")

只针对post请求方式有效

的方式进行指定post请求的编解码解决中文乱码。需要注意的问题是:此设置只对于此次请求没有进行任何request.getparmer()操作的请求才有效,response同理要在返回之前设置。因此我们常用spring的encodingFilter拦截器进行编码格式的设置,跟踪源码会发现其本质就是request.setCharacterEncoding("gbk")但是拦截器能保证一定设置在request.getparmer()之前,而且不用我们每个方法都啰嗦的写上边的东西。

编解码问题还涉及到请求头contentype以及jsp页面的pageEncoding等等,此处不再详细说明。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值