声明:本文基于以window记事本编写Hello Java程序,并在命令行窗口(或终端)运行的方式展开介绍,如若不是此类环境出现的问题,请自行跳过。
初学者在初次编写Java程序进行编译时,由于本身代码中注释含有中文(或以其他形式包含中文),在命令行窗口编译程序后会出现如下报错(以Hello Java为例):
源代码:
public class HelloJava{//创建一个HelloJava类
public static void main(String args[]){
System.out.println("你好,Java!");
}
}
终端运行报错:
这里是由于国际版本JDK在编译时首先获得操作系统的file.encoding参数(保存了操作系统默认的编码格式GBK),当我们不加设置就编译时,相当于使用了参数:javac -encoding gbk XX.java,而文本文档保存方式为UTF-8(或其他编码方式)当然就会出现不兼容的情况。
查看当前文本文档的编码方式在窗口右下角:
采用非UNICODE的GBK编码形式 编码UNICODE 的UTF-8文件,当然行不通,为此有两种简单的解决方案:
方法一:更改记事本编码类型
另存为 ANSI 编码文件。
保存后再次编译运行:
方法二:运用-encoding参数指明编码方式
改javac XXX.java 为javac -encoding UTF-8 XXX.java
javac -encoding UTF-8 HelloJava.java //编译方式(生成HelloJava字节码文件)
java HelloJava //运行方式(启动虚拟机,运行字节码文件)
修改编译代码后运行:
注意:这里Hello Java文件仍为UTF-8编码格式
这样,GBK编码的不可映射字符问题就顺利解决了!!
参考文献: