首先,Javac 编译的class 文件中的汉字都是 Unicode 编码的。 Unicode 俗称万国码,可以映射到不同的 charset ,如 utf-8,gbk 等。所以乱码可能的地方是,javac 编译的时候。
在执行javac 的时候,要确定项目文件用了什么编码,有的项目多人开发,会存在部分文件gbk 部分文件utf-8 的情况,需要将所有文件的编码统一。确认编码统一后,需要在ide 设置编译参数。通过 javac -help 可以看到 -encoding <encoding> 指定源文件使用的字符编码 。
指定javac 编译文件时的编码如 javac -encoding GBK
在eclipse 和 idea 等开发工具中都能手动指定。
正确编译的class 文件,不管在什么平台都能正确运行。但是在Windows 和 Linux/mac 下查看可能会有一个乱码,主要是大部分Windows的console 是gbk 编码的 ,可以设置console 的编码为utf-8 ,也可以在Linux/mac下设置console为gbk ,不过这种方法并不推荐。
在执行java 命令的时候,可以手动设置程序以什么编码输出信息到控制台。在命令行添加命令行参数,如 -Dfile.encoding=UTF-8
。
同样,在开发工具中都能手动设置命令行参数。(程序启动参数,临时环境变量都是可以设置的)
最主要的一点就是,class 文件中的字符是 Unicode 的形式存储的,javac 是写,Java 是读,只要设置的 字符集 正确,那么不管在什么平台,编译什么编码集的项目,都能在其他平台正确输出。