重点:JDK18之前是UTF8编码所以能用UTF8,JDK18之后成了GBK所以用UTF8有乱码
重点:JDK18之前是UTF8编码所以能用UTF8,JDK18之后成了GBK所以用UTF8有乱码
重点:JDK18之前是UTF8编码所以能用UTF8,JDK18之后成了GBK所以用UTF8有乱码
乱码对照表
相关文档:JEP 400:默认为 UTF-8 (openjdk.org)
很多人在用idea时总是遇到控制台输出乱码
对于idea编码问题网上都是,动不动UTF-8,其实都没有涉及到问题的本质,下面从头理一遍
1.设置编码
打开设置后这里面由三个能改编码的地方,分别是全局编码,项目编码和属性文件编码,我们都设置成UTF-8
第二个就是控制台编码,我们也改成UTF8
2.开始分析
用例1: 文件编码UTF-8 设置控制台UTF-8
然后新建一个HelloWorld类输出一下汉字看看,可以看到当前用的编码是UTF-8,输出了一些奇怪的符号数量是8个,我们输入的字符是6个
下面用表格展示
用例编号 | 全局编码 | 项目编码 | 输出的编码 | 控制台编码 | 用例输出 |
---|---|---|---|---|---|
1 | UTF8 | UTF8 | UTF8 | UTF8 | 乱码1 |
2 | UTF8 | UTF8 | UTF8 | GBK | 正常 |
3 | UTF8 | GBK | GBK | UTF8 | 乱码1 |
4 | UTF8 | GBK | GBK | GBK | 乱码2 |
5 | GBK | UTF8 | UTF8 | UTF8 | 乱码1 |
6 | GBK | UTF8 | UTF8 | GBK | 乱码1 |
7 | GBK | GBK | GBK | UTF8 | 正常 |
8 | GBK | GBK | GBK | GBK | 正常 |
正常:你好,世界! |
乱码1:��ã����磡 |
乱码2:浣犲ソ锛屼笘鐣岋紒 |
乱码3:???????磡 |
3.得出结论
- 文件的编码只受项目编码的影响,且和项目编码一样
4.针对错误结果二次测试
打开运行配置,我们用-Dfile.encoding在运行的时候指定编码(图中标红的地方都能打开)
测试半天基本等于白测
最终结论
IDEA编码的水太深,不是你我能把握的住的,当我们写项目的时候按我说直接设置成UTF8然后控制台默认GBK,每次运行在vm中加上-Dfile.encoding=GBK
上面都是初步分析,java虚拟机确定编码是在执行阶段,所以测试结果很有可能不一样,分析源码请看:
如果用的18以上JDK还希望文件编码是UTF8可以按照途中步骤配置好虚拟机,生成class的时候用GBK,这样给显示正常,同时保证源码能分享