最近在做一个新项目的时候,设置了前台页面全部使用UTF-8,后台的文件全部使用UTF-8。
idea的默认编码和项目也全部设置为UTF-8。还加上了spring的字符编码过滤器,全部用的utf-8,为了防止乱码问题,使用的freemarkert也设置为utf-8,坚持将所有的东西设置为utf-8。可神奇的事情发生了,项目跑起来后中文乱码出现了。
出问题后首先检查的数据库,无异常,然后发现就简单的将 下面的语句输出
System.out.println("视图无数据");
也会是乱码。然后怀疑的是idea编码设置问题,可查询一看
上面的三个部分即使设置为utf-8还是没用,控制台输出是乱码,数据也乱码。因为之前发现修改了这里的编码后如果不重启,编码是不会生效的,而且开了另外一个项目,这里的编码也会被影响,于是重启了idea,依旧无效。接着检查了tomcat的编码,设置为utf-8 无果。
接着设置idea中tomcat的编码。如下截图
看到这个设置,发现乱码更加严重。然后终于发现idea还专门有个文件保存编码,而且你页面即使显示
为utf-8,也不一定正确。
去到项目
的目录下有个.idea的文件夹,这个文件夹里有个encodings.xml的文件
里面记录了你某些文件对应的特殊编码
将里面除了utf-8编码的全部删除,乱码终于解决。注意,有些idea的编码即使设置了utf-8,不重启或者不删除这个文件也是无效的。千千万万要注意这个idea的大坑。
另外总结下idea遇到的其他坑:
1,乱码的如上
2,lib文件如果没手动加到配置下,是无法加载到tomcat下的
3,在一个项目上打开另外一个项目,会对新打开的项目编码有影响
4,idea的tomcat设置非常麻烦,一个地方没设置好,基本项目就是404