javac 编译文件使用的编码方式(是否和源文件编码方式一致)

  • Post author:
  • Post category:java

转载自https://blog.csdn.net/congcongsuiyue/article/details/42174499

下面分几种情况来探讨,这三种情况也是我们常用的编译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编码的,所以会出现乱码。

那么解决办法呢?解决办法就是使用javacencoding参数来制定我们的解码编码。如下:javac -encoding UTF-8 Demo.java这里我们指定了使用UTF-8来解码读取的字节,由于这个编码和Demo.java文件编码一致,所以不会出现乱码情况了。

PS:如果源文件Demo.java中不含有中文字符,则即使不指定-encoding utf-8 也不会报错。(GBK对汉字用两个字节存储,而汉字在UTF-8中大都是三个字节)。

2.Eclipse中编译java文件。

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

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

Ant也是我常用的编译java文件的工具。首先,必须知道Ant在后台其实也是采用javac来编译java源文件的,那么可想而知,1会出现的问题在Ant中也会存在。如果我们使用Ant来编译UTF-8编码的java源文件,并且不指定如何编码,那么也会出现乱码的情况。所以Ant的编译命令<javac>有一个属性” encoding”允许我们指定编码,如果我们要编译源文件编码为UTF-8java文件,那么我们的命令应该如下:<javac destdir=”${classes}” target=”1.4″ source=”1.4″ deprecation=”off” debug=”on” debuglevel=”lines,vars,source” optimize=”off” encoding=”UTF-8″>

指定了编码也就相当于”javac –encoding”了,所以不会出现乱码了。