首页 > 代码库 > 被坑死了的中文乱码

被坑死了的中文乱码

         最近在调试一个接口。然后,就被中文乱码给坑了。

     事情的经过是这样的,领导让我跟其他服务器的接口进行对接,简单点就是我这边暴露一个http的请求地址给对方,然后对方发请求到我这边。然后,对方请求时,使用的是GBK编码的GET请求,然后,中文到我这边就乱码了。

     最初,我这边的tomcat使用的是UTF-8编码。然后,接到对方请求后,怎么转都转不过来中文。当初不想改tomcat的配置,我就将(GBK、UTF-8、GB2312、ios-8895-1)这四种编码来回转啊!怎么就转不过来。

     后来,没办法。那就只能改我这边tomcat的编码了。把server.xml里面的URIEncoding设置成了GBK编码的格式。然后我就欢天喜地的去找对方调试,并信誓旦旦的说没问题了。但是,请求过来以后,悲剧又来了。还是没有转过来。还是继续乱码,当时跳楼的心都有了(公司是6楼,摔得可疼)。

     然后,接下来就是继续找资料,查方法。最后,就把问题的解决点放在了Struts2的国际化,默认编码格式了。Struts2的核心包里面有一个default.properties文件,里面有一个struts.i18n.encoding=UTF-8的设置。也就是说,Struts2默认,UTF-8。悲了个剧的,接下来就是要把这个默认的更改过来。具体的更改方法有两种:

      第一,直接用压缩软件打开你的struts核心包,然后找到default.properties文件,将里面的配置改了。但是这个方法不够灵活,因为如果想换其他的格式就悲了个剧了。

      第二,在classpath下,增加一个配置文件struts.properties,在这个文件里面你可以设置很多配置来覆盖struts的默认配置。这个也是最灵活的修改

      然后,接下来两个配置都改了,兴奋的去接收请求,还是会有乱码。然后,有研究了一番。最终接收GBK格式的GET请求的接收方法如下:

         URLDecoder.decode(httpServletRequest.getParameter("param"), "GBK");

         但是,问题又来了。UTF编码格式的有乱码了,继续研究,然后针对UTF-8的接收是这样的,

        String param = URLEncoder.encode(httpServletRequest.getParameter("param", "GBK");

        String utpParam = URLDecoder.decode(param, "UTF-8");

        最后,总结。上面标红的是需要修改内容。由于我这边的系统,是可以明确知道是什么类型什么编码请求过来,所以我做了一个配置,对于不同的请求使用不同的参数获取方法。但是,对于一些系统。不知道请求的具体格式。我这种方法就不适用。所以,这个后期还是需要继续优化研究的。如果,哪位大神有好的解决方法,也请多多喷水告知。在下细听便是。

被坑死了的中文乱码