Tomcat 奇葩问题之乱码

  有这样一个问题,在Windows下面正常,然后在Linux下面乱码,最常见的最可能的想法就是编码设置不正确,问题是程序中所有能设置编码的地方都设置了,还是不行,怎么办?

  特意在虚拟机上的Linux测试环境上跑了一遍,发现压根什么问题都没有,可是两个Linux下面的结果不一样。当然,环境是不一样的,一个是Centos,一个是Arch,一个是Tomcat7一个是Tomcat8,还是有点差别的,但问题出在哪呢,久久不得而知。

  下一步,检测数据库,数据编码再三个环境中发现都是一样的,为什么还是会出现这个情况,感觉很怪异。但是插入的中文数据库是正常的,这样又不科学。

  再次,怀疑Mybatis,怀疑貌似也是没有理由的,所以的操作都没有编码的选项。但是,无意中发现了这个,如果插入数据都是POST过去的,但是现在的数据是GET过来,GET出了问题,GET哪有问题了。

  这样说吧,中文在URL中传递是回经过一个编码的过程,然后这个编码由你的页面类型决定,页面是UTF8的就是UTF8,初步检查之后发现提交到服务器的编码数据是对的,但是获取出来就不对了,问题就在这个解码的过程。GET请求由Nginx转发到Tomcat,而Nginx不处理,而tomcat处理时是依据系统的编码进行的。修改server.xml中编码为强制UTF-8搞定。

  试着解释为什么两个Linux不一样:能力有限,解释不了,估计是Tomcat8换了默认编码了吧。

5条评论在“Tomcat 奇葩问题之乱码”

写下你最简单的想法