Ant编译出现乱码问题解决

最近几天碰到一个Ant编译后,出现乱码的问题,纠结了几天,目前应该算是解决了。事情是这样,手头有一个java的工程,由于是在windows下开发的,所以源码的编码格式均为gbk,之前工程的编译都是在windows环境下进行,所以一直也没有问题。最近由于环境管控需要(《在Linux下的用户特殊操作权限控制》),尝试在Linux环境下进行自动编译和部署,因此就出现了编译出来的应用有乱码的问题,查了几个地方,已确定是ant的javac和copy指令的参数配置问题,在这里把过程中学习到的知识记录一下。

首先是Java的编译和运行机制,从.java编译为.class的过程中,javac会默认按照编译所在操作系统的默认编码读取源代码,并编译成内部为UTF-8编码的.class,而在java虚拟机执行的过程中,会按照程序运行所在操作系统的默认编码,将UTF-8编码再次进行转换。通过这种两次转换的方式,Java实现了对多语言的支持。 Continue reading