Windows字符编码与Java、Tomcat、IDEA不得不说的坑

针对网上各种教程,说明
1.在IDEA安装目录的-bin文件夹中修改idea64.exe.vmoptions,增加-Dfile.encoding=UTF-8参数,该方法不一定会生效
2.针对在注册表中修改CMD控制台编码的,可能造成其他文件的读写乱码,不建议,可采用方法Tomcat解决方法,捕获Tomcat执行窗口设定编码。

最简单方法:直接修改tomcat目录中的log.propertise文件中的:java.util.logging.ConsoleHandler.encoding = GBK
注意:此时java编译时不可带参数-Dfile.encoding=UTF-8,IDEA的VM Options也不可带-Dfile.encoding=UTF-8参数否则会乱码。

1. IDEA-Java-Tomcat调用乱码方法
第1步:修改IDEA-File Encodings
File —>Settings —>Editor—>File Encodings

properties 中文乱码 idea_Windows

第2步:修改IDEA-Help

properties 中文乱码 idea_java_02

在点开"Edit Custom VM Options"文件中的行尾添加下行内容

-Dfile.encoding=UTF-8

效果图(注意打开的文件名可能因为系统位数而不同,以自己电脑为准):

properties 中文乱码 idea_Windows_03

第3步:增加JAVA编译系统变量(防止JAVA编译输出乱码)

以下全局方法1和局部方法2根据需求选其种一个即可
1.全局系统内编译生效)环境变量---->系统变量
新建如下系统变量:

变量名: JAVA_TOOL_OPTIONS 变量值: -Dfile.encoding=UTF-8

2.局部仅在IDEA中生效)也可以在IDEA中点击"Edit Configurations…"中点击Startup/Connection,中的Environment Variables中添加如下环境变量

变量名: JAVA_TOOL_OPTIONS 变量值: -Dfile.encoding=UTF-8

properties 中文乱码 idea_Windows_04


properties 中文乱码 idea_Windows_05

结束上述操作后,必须清理IDEA缓存,重启电脑即可(环境变量要生效有时需要重启电脑)

2. Tomcat解决方法

(只针对Tomcat在Windows控制台下执行窗口日志输出,上述方法只能改变IDEA中调用Tomcat显示中文的效果,如果要改变Tomcat在Windows控制台下显示中文,需要以下方法)

**解决方法 **

在Windows中为Tomcat执行窗口单独增加控制台字符集
1.快捷键按下:win+r
2.输入 regedit 打开注册表
3.找到 "HKEY_CURRENT_USER---->Console

若该目录下没有Tomcat项,则新建项创建"Tomcat"
然后:
1.在右侧新建->DWORD:名称为CodePage十进制值为65001
2.在右侧新建->DWORD:名称为FontFamily十进制值为54
以上两个值不可缺,如果觉得字体不好看可以从(%SystemRoot%_system32_cmd.exe文件夹中仿造写出相关初始化字体)

properties 中文乱码 idea_日志输出_06

3. 造成该情况原因分析(个人观点,若有错误欢迎指正)

properties 中文乱码 idea_Windows_07

分析1:如上图所示,由于Windows系统默认采用的是GBK(936)的字符编码,Tomcat使用了UTF-8(65001),因此其原因就是在于执行Tomcat字符不一致造成了控制台日志输出乱码,解决方法就是将日志输出的控制台字符编码设置为UTF-8即可,因此有了Tomcat解决方法

分析2为什么在IDEA中需要设置环境变量JAVA_TOOL_OPTIONS?
:因为JAVA在Windows下默认控制台输出格式是GBK(936)形式,而源文件的格式可能是UTF-8(65001),因此需要添加参数 -Dfile.encoding=UTF-8,使其在输出控制台输出时可以按照UTF-8形式,防止如System.out.println语句时输出乱码。
分析3:使用最简单的修改Tomcat中的log.propertise日志输出为GBK格式就可以完美解决,因为其日志输出全部采用GBK格式,不需要乱七八糟的设置。