近期在调试一个接口。然后,就被中文乱码给坑了。
事情的经过是这种,领导让我跟其它server的接口进行对接,简单点就是我这边暴露一个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");
最后,总结。上面标红的是须要改动内容。因为我这边的系统,是能够明白知道是什么类型什么编码请求过来,所以我做了一个配置,对于不同的请求使用不同的參数获取方法。可是。对于一些系统。不知道请求的详细格式。
我这样的方法就不适用。所以。这个后期还是须要继续优化研究的。假设,哪位大神有好的解决方法,也请多多喷水告知。在下细听便是。