常年Eclipse的守旧派久闻IDEA大名,终于在dalao的安利下入了IDEA的坑((才不是由于能够用翻译插件html
入坑一段时间,由于在编码方面了解的还算比较多,平时基本没遇到过乱码问题,而且在第一次使用IDEA时就修改了设置中全部编码方式为UTF-8,直到最近作一个小小的javaweb项目,遇到了很奇怪的问题,平时本人都保持使用UTF-8的习惯,各类编辑器都是默认UTF-8编码,此次出问题的是两个html文档与两个js脚本,均为UTF-8编码,在本地使用浏览器打开时一切正常,可是放到IDEA中,加上设置请求与响应的编码的过滤器后,在浏览器中打开页面上的中文居然乱码了,肯定这个问题存在的时候实在很是诧异,在仔细检查过本身的各类设置,代码以及文件编码后确信没有问题,经过浏览器中的开发者工具能够看到AJAX请求获得的响应数据中的中文是正常的,只是html与js这两种静态资源乱码了,尝试去掉设置编码的过滤器后,更神奇的事出现了,html与js的再也不乱码了,可是经过AJAX请求获得的响应数据中的中文却又乱码了(崩溃)。java
在作了各类排查后实在不知道问题发生在哪里,因而猜想会不会是运行环境的问题(JDK10.0.2 + Tomcat9.0.11),当把运行环境换为(JDK1.8_171 + Tomcat8.5)后,启用设置编码的过滤器,乱码问题居然奇迹般的消失了。web
因而只能将这个问题暂时归结为环境问题或者是这个项目有问题了。。ajax
晚上吃饭回来,从新建了个项目,用的疑似有问题的环境,一步一步当心的从新创建了以前这个项目的结构,编译,运行,仍是老样子,html与js乱码,ajax响应正常,因而开始疯狂百度,终于在一位前辈的博客中看到了类似的问题:浏览器
前辈的解决分三步:app
File-->Settings-->Editor-->File Encodings编辑器
将这三个地方都设置成UTF-8,使文件的编码格式都是UTF-8(不过这个貌似跟Tomcat乱码没多大关系)工具
在设置了Tomcat的VM选项后,静态资源乱码的问题消失了,根据对这个参数的只知其一;不知其二,我的认为是:Tomcat是运行在JVM的基础上,所以受JVM参数的影响,因为个人系统是Win7简体中文版,系统默认编码为GBK,所以JVM在不指定这个选项的状况下,也将读取系统默认编码做为本身的默认编码,Tomcat则使用此默认编码做为读取普通资源文件时的默认编码,这就致使了个人UTF-8格式的html与js文件被Tomcat以二进制读取并使用GBK进行了错误解码获得乱码字符文件,随后又经过UTF-8编码解码将这堆乱码呈现到了浏览器。学习
根据上述猜测进行实验,将个人html文件保存为GBK编码格式,js保持UTF-8不变,去掉这个VM选项,启动Tomcat,果真,html文档显示正常,经过开发者工具查看加载的js文件,里面的中文仍然是乱码,所以能够确定,Tomcat 9中默认处理静态资源的Servlet使用了JVM提供的默认编码来读取了静态资源,经过VM选项指定文件编码为UTF-8后便可解决这个问题。编码
安装目录\bin下,加破解补丁时的那两个文件(32/64)(*.vmoptions),就是用来为IDEA的启动指定VM选项的,在这两个文件中也加上这行,启动,运行,完美!一切乱码都消失了~
经过此次的乱码问题,也算是获得了一点经验,在往后的学习中,凡是基于JVM运行的程序,若是须要统一编码,都要尽可能加上这行VM选项,从而保证不会出现莫名其妙的乱码问题,在设置了这个选项 后也要注意将软件中有关编码的设置一并统一,以避免出现其余问题。
-Dfile.encoding=UTF-8