解决 javac 编译 UTF-8 文件时的 GBK 编码错误
作者:Ake 发布于:2020年9月17日
问题
来看下面这段java程序:
public class Test{
public static void main(String[] args){
System.out.println("哈哈哈");
}
}
是不是感觉没什么问题,是的,的确没问题。
但在 Windows 下使用javac Test.java编译该源文件(源文件编码为 utf-8)时会报错,如下:
Test.java:3: 错误: 编码 GBK 的不可映射字符 (0x88)
System.out.println("鍝堝搱鍝?");
^
1 个错误
原因
造成这个问题的原因如下:
源代码文件的字符编码格式为 utf-8,但 javac 编译时会以操作系统默认的字符编码去解释源文件(中文 Windows 平台默认字符编码为 gbk),当源代码中只含有英文时不会出现什么问题,但当源文件中含有中文时就会出现上面的错误。
解决方案
有两个解决这个问题的方法:
- 源文件以 gbk 编码存储,此方法可行但不推荐。
- 在 javac 的编译参数中有一个
-encoding参数,该参数指定了源文件使用的字符编码,所以在编译时加上这个参数指定源文件的字符编码即可,如javac -encoding utf-8 Test.java。