1. 在Eclipse中新建3个class:A,B,C ,右键Properties中的Text file encoding,分别设定这三个A,B,C的文件编码为:iso8859-1,gbk,utf-8.
再通过同样的样式在bin目录下查看A.class,B.class,C.class文件编码可以发现都是utf-8的形式。
2.在A中编写如下代码:包含中文字符。
public static void main(String[] args) {
String str = "中";
System.out.println(str);
}
通过命令行的形式,执行javac A.java可以看到编译出错。javac -encoding utf-8 A.java可以正常编译通过。
在这里指定的encoding utf-8实际上上告诉jvm以指定utf-8编码来读取A.java(也是utf-8编码的)文件,这样才能正确读取到内存中,转换成unicode编码的二进制字符序列,最后成功生成以utf-8编码保存的class文件。
3.整个Eclipse的workspace编码设置成utf-8或者在eclipse.ini中配置-Dfile.encoding=utf-8,那么程序中
System.getProperty("file.encoding")就为utf-8.
在程序中虽然可以通过System.setProperty("file.encoding","utf-8")改变file.encoding的值,但jvm启动参数
file.encoding启动后不能被修改的。
public static void main(String[] args) throws Exception {
workspaceGBK();
//workspaceDfileEncodingUTF8();//run configurations中配置-Dfile.encoding=utf-8
}
static void workspaceGBK() throws Exception {
System.out.println(System.getProperty("file.encoding"));//GBK
FileWriter out = new FileWriter("gbk_1.txt");//4bytes
out.write("你好");
out.close();
OutputStreamWriter utf8 = new OutputStreamWriter(new FileOutputStream(
"utf8_1.txt"), "utf-8");//6bytes
utf8.write("你好");
utf8.close();
}
static void workspaceDfileEncodingUTF8() throws Exception {
System.out.println(System.getProperty("file.encoding"));//utf-8
FileWriter out = new FileWriter("gbk_2.txt");//6bytes
out.write("你好");
out.close();
OutputStreamWriter utf8 = new OutputStreamWriter(new FileOutputStream(
"utf8_2.txt"), "utf-8");//6bytes
utf8.write("你好");
utf8.close();
}
gbk_1.txt,gbk_1.txt,utf-8-1.txt,utf-8-2.txt中的中文都显示正常。前一个代码中使用的file.encoding是继承自工作空间的默认值gbk,后者通过设置-Dfile.encoding=utf-8改变了默认值。