引用文章里“问题的原因”:
1. 本地系统区域语言字符集的问题,我们的系统可能默认的字符集为GB2312或GBK。
2. Java源文件编码字符的问题,如果使用eclipse可以查看一下java source文件的编码方式。
3. javac编译时的字符问题,这一个问题很容易被忽略,运行一下javac可以看到有一个encoding的参数可以设置----这一个很重要。
4. 要读取文件的编码和读取时的字符集设置问题,如果我们要用的字符串不是硬编码在java源码中,而是从资源文件中读取时,就要注意这个问题了。
解决方法呢:
第一种情况,本地系统的语言字符,我们管不了;
第二种情况,转换一下文件的编码就好了;
第三种情况,当我们检查确定Java源文件编码字符是UTF-8,对javac编译时的参数设置,增加encoding参数,如:javac -encoding utf8 Test.java
但在Eclipse没找到相关的设置,只好有以下方法:
1.手工编译使用到MenuItem的类,目前只发现java.awt包会存在这个问题,swing包能很好的解决这种字符集变换的问题。
2.使用其它编译方式,如ant、Maven,它们都能配置javac。先给出网友文章给出的Maven例子:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>utf8</encoding>
</configuration>
</plugin>
....
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>utf8</encoding>
</configuration>
</plugin>
....
而我用Ant的:
<target name="compile" depends="copyfiles">
<javac srcdir="${sourcedir}"
destdir="${targetdir}"
encoding="UTF-8"
target="1.6"
classpathref="libraries" />
</target>
<javac srcdir="${sourcedir}"
destdir="${targetdir}"
encoding="UTF-8"
target="1.6"
classpathref="libraries" />
</target>
4. 要读取的文件的字符编码和读取流编码,对一个资源文件,我们也要设置其编码为utf8(参照第2条,跟设置java源文件编码是一样的),同时在使用流读取时也要设置流的读取编码(这个网上说java字符流的默认的是jvm的编码,跟系统字符集一致)。
读取流代码如下:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "utf8"));
这里还要注意的是:在复制这个资源文件时,最好也设置一下编码,如用ant复制时:
<echo message="copy conf"/>
<copy file="D:\klaudisk-client\conf\settings.ini"
tofile="D:\klaudisk-client\target\conf\settings.ini" overwrite="true" encoding="utf8"/>
<copy file="D:\klaudisk-client\conf\settings.ini"
tofile="D:\klaudisk-client\target\conf\settings.ini" overwrite="true" encoding="utf8"/>
还可以使用Properties.load()方法来加载.properties文件(该文件是被java bin下的navie2asc程序处理过的文件),这样就不用管第4点问题了。
我的问题是第3种情况,使用Ant来编译生成jar,解决了!
本文转自 Icansoft 51CTO博客,原文链接:http://blog.51cto.com/android/784171