记一次抓狂的乱码经历

常年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响应正常,因而开始疯狂百度,终于在一位前辈的博客中看到了类似的问题:浏览器

IDEA启动TOMCAT静态页面时乱码

前辈的解决分三步:app

1.修改IDEA设置中的几个默认编码(这个我在安装后接着就设置了)

File-->Settings-->Editor-->File Encodings编辑器

将这三个地方都设置成UTF-8,使文件的编码格式都是UTF-8(不过这个貌似跟Tomcat乱码没多大关系)工具

 


 

2. 在VM options添加:-Dfile.encoding=UTF-8,而且将下面两个属性设为Update classes and resources (这个我只设置了前半句,后边这俩我的认为和编码无关就没有动)

在设置了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后便可解决这个问题。编码

 


 

3. 在第二步操做事后,会发现Tomcat在IDEA控制台的启动输出中的中文(信息、警告等)变成了乱码。第三步就是将IDEA的启动选项中也加上这个VM选项(相似Eclipse中在ini中加这个选项)

安装目录\bin下,加破解补丁时的那两个文件(32/64)(*.vmoptions),就是用来为IDEA的启动指定VM选项的,在这两个文件中也加上这行,启动,运行,完美!一切乱码都消失了~

 


 

反思与总结

 经过此次的乱码问题,也算是获得了一点经验,在往后的学习中,凡是基于JVM运行的程序,若是须要统一编码,都要尽可能加上这行VM选项,从而保证不会出现莫名其妙的乱码问题,在设置了这个选项 后也要注意将软件中有关编码的设置一并统一,以避免出现其余问题。

 


 

-Dfile.encoding=UTF-8
相关文章
相关标签/搜索