background image

    

 

问题二: 既然读文件要使用和文件编码一致的编码,那么 javac 编译文件也需要读取文
件,它使用什么编码呢?

       这个问题从来就没想过,也从没当做是什么问题。正是因为问题一而引发的思考,
其实这里还是有东西可以挖掘的。下面分三种情况来探讨,这三种情况也是我们常用的编
译 java 源文件的方法。

       1.javac 在控制台编译 java 类文件。

       通常我们手动建立一个 java 文件 Demo.java,并保存。此时 Demo.java 文件的编码为
ANSI, 中 文 操 作 系 统 下 就 是 GBK. 然 后 使 用 javac

命 令 来 编 译 该 源 文 件 。 javac 

Demo.java” 。Javac 也需要读取 java 文件,那么 javac 是使用什么编码来解码我们读取的字
节呢?其实 javac 采用了操作系统默认的 GBK 编码解码我们读取的字节,这个编码正好
也是 Demo.java 文件的编码,二者一致,所以不会出现乱码情况。让我们来做点手脚,在
保存 Demo.java 文件时,我们选择 UTF-8 保存。此时 Demo.java 文件编码就是 UTF-8 了。我

们再使用 javac Demo.java”来编译,如果 Demo.java 里含有中文字符,此时控制台会出现
警告信息,也出现了乱码。究其原因,就是因为 javac 采用了 GBK 编码解码我们读取的字
节。因为我们的字节是 UTF-8 编码的,所以会出现乱码。如果不信的话你可以自己试试。那
么解决办法呢?解决办法就是使用 javac 的 encoding 参数来制定我们的解码编码。如下:
javac -encoding UTF-8 Demo.java。这里我们指定了使用 UTF-8 来解码读取的字节,由于这
个编码和 Demo.java 文件编码一致,所以不会出现乱码情况了。

 

       2.Eclipse 中编译 java 文件。

       我习惯把 Eclipse 的编码设置成 UTF-8。那么每个项目中的 java 源文件的编码就是
UTF-8。这样编译也从没有问题,也没有出现过乱码。正是因为这样才掩盖了使用 javac 可
能出现的乱码。那么 Eclipse 是如何正确编译文件编码为 UTF-8 的 java 源文件的呢?唯一
的解释就是 Eclipse 自动识别了我们 java 源文件的文件编码,然后采取了正确的 encoding
参数来编译我们的 java 源文件。功劳都归功于 IDE 的强大了。

       

       3.使用 Ant 来编译 java 文件。

       Ant 也是我常用的编译 java 文件的工具。首先,必须知道 Ant 在后台其实也是采用
javac 来编译 java 源文件的,那么可想而知,1 会出现的问题在 Ant 中也会存在。如果我们
使用 Ant 来编译 UTF-8 编码的 java 源文件,并且不指定如何编码,那么也会出现乱码的
情况。所以 Ant 的编译命令<javac>

” 

有一个属性 encoding”允许我们指定编码,如果我们要

编译源文件编码为 UTF-8 的 java 文件,那么我们的命令应该如下: