一、问题描述:
最近在 Windows 电脑上使用 IntelliJ IDEA 运行 Java 程序时,发现运行报错且控制台显示乱码。如下图1:
����: ���� GBK �IJ���ӳ���ַ� (0xAA)
// 测试,一�?
^
有点蒙,这是啥意思?又报错又是乱码。
二、排查步骤:
1、先来解决乱码吧。把 IDEA 的编码都设置为 UTF-8。
如下图2:
不行,运行结果依旧。
2、网上查阅资料提示,需要把 Windows 的系统默认编码设置为 UTF-8。
设置步骤如下图3/4/5/6:
最后点【确定】按钮,重启电脑后再看看 IDEA 的运行效果。
如下图7:
OK,爽,不错。终于显示中文了。
但是,非法字符是什么意思?
错误: 非法字符: '\ufeff'
3、网上查阅资料发现,IDEA 需要设置文件的创建格式为 NO BOM。
Create UTF-8 Files: with NO BOM
UTF-8 NO BOM 含义:不包含特殊的异常字符
UTF-8 BOM 含义:会包含特殊的隐藏字符,会导致 IDEA 运行失败。
具体二者概念请去大海上浪一把了解下。
上面显示:【错误:非法字符:‘\ufeff’】就是因为文件编码格式为 UTF-8 BOM,携带了非法字符导致 IDEA 无法识别。
修改方式,如下图8:
但是,修改后,运行代码还是一样报错。
那,有没有可能,当前项目中的 Java 代码已经是 UTF-8 BOM 格式的了,所以导致运行报错呢?
4、更改当前 Java 文件的编码格式为 UTF-8 NO BOM。
在电脑桌面新建文本文档,然后把 Java 文件中的代码全选复制到文本文档中,调整编码格式为 UTF-8 NO BOM,再保存,重命名文件名和后缀,粘贴替换 IDEA 中的 Java 文件。
如下图9:
再次运行,看看效果。
yes,终于正常了。
yes,终于正常了。
yes,终于正常了。
如下图10:
最后,再对比下编码转换前后的差异。
如下图11:
确实,之前一直报错的 Java 代码编码格式是 UTF-8 BOM,转换为 UTF-8 NO BOM 后就好了。