上一篇我们介绍了《Web中文乱码——1、Spring+jetty编解码基础》。据此,当乱码发生时,我们就可以推断乱码原因并解决。
首先,强烈建议将上文提到的可配置项都配置成统一的字符集,这样能避免很多麻烦。但接下去,为了方便说明问题,我假设各项配置是不一样的,比如:contentType中指定的字符集为GBK,而jetty中指定的字符集为UTF-8
<metacharset="Content-type: application/x-www-form-urlencoded;charset=GBK" />
java **** -Dorg.eclipse.jetty.util.URI.charset=UTF-8
contentType为GBK说明浏览器用GBK来对form参数进行编码,jetty参数为UTF-8说明servlet以UTF-8来解析各类参数。那么根据不同的情况,乱码的解决办法大致如下:
1、Get请求参数乱码
明显是浏览器的编码GBK和servlet的解码UTF-8不同造成的,最简单的是对得到的参数param进行手动转码:new String(param.get("UTF-8"), "GBK")