zoukankan      html  css  js  c++  java
  • 被坑死了的中文乱码

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

         事情的经过是这种,领导让我跟其它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");

            最后,总结。上面标红的是须要改动内容。因为我这边的系统,是能够明白知道是什么类型什么编码请求过来,所以我做了一个配置,对于不同的请求使用不同的參数获取方法。可是。对于一些系统。不知道请求的详细格式。

    我这样的方法就不适用。所以。这个后期还是须要继续优化研究的。假设,哪位大神有好的解决方法,也请多多喷水告知。在下细听便是。


  • 相关阅读:
    使用C++为对象分配与释放内存时的几个好习惯
    OGRE渲染流程
    【问题解决记录】无法识别的标志“-sdlMode”,在“p2”中
    四元数 Quaternion
    《The Cg Tutorial》阅读笔记——凹凸贴图 Bump Mapping
    尝试优化骨骼动画计算的意外收获——使用嵌入式汇编对float转int进行优化
    Model 的 Meta 选项
    dns资料
    ansible中的变量
    DockerFile与docker-compose.yml是什么
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5118534.html
Copyright © 2011-2022 走看看