学习笔记,仅供参考
错误
当Java源代码中包含中文字符时,我们在用javac编译时可能出现错误:
错误: 编码GBK的不可映射字符
错误原因
由于JDK是国际版的,我们在用javac编译时,编译程序首先会获得我们操作系统默认采用的编码格式(GBK),然后JDK就把Java源文件从GBK编码格式转换为Java内部默认的Unicode格式放入内存中,然后javac把转换后的Unicode格式的文件编译成class类文件。
此时,class文件是Unicode编码的,它暂存在内存中,紧接着,JDK将此以Unicode格式编码的class文件保存到操作系统中形成我们见到的class文件。当我们不加设置就编译时,相当于使用了参数:javac -encoding GBK Test.java,就会出现不兼容的情况。
解决方案
如果我们用的是EditPlus,则可以通过另存为的方式,选择ANSI编码,覆盖掉该源文件,即可解决编码 GBK不可映射字符的问题。
比如,我们的代码中存在中文字符
class Test0528 {
public static void main(String[] args) {
char c1 = '羊';
System.out.println(c1);
}
}
编译报错:
---------- javac ----------
Test0528.java:3: 错误: 编码GBK的不可映射字符
char c1 = '缇?';
^
Test0528.java:3: 错误: 未结束的字符文字
char c1 = '缇?';
^
Test0528.java:3: 错误: 未结束的字符文字
char c1 = '缇?';
^
3 个错误
Output completed (3 sec consumed) - Normal Termination
另存为,选择ANSI编码:
另存为后,再次编译:
---------- javac ----------
Output completed (2 sec consumed) - Normal Termination
成功!