子敬正在创造自己的人生
需求有轻重缓急,功能有可控不可控。 需求有版本有截止(否则会无休无止),功能不可控变为可控。 集中兵力消灭敌人有生力量,集中优势兵力消灭敌人有生力量。

通过代码

System.getProperty("file.encoding")

  可以获得file.encoding的值

问题1:file.encoding的值是什么呢?  这个一开始我认为是操作系统的编码

但我错了,它的值为保存每个程序的main入口的那个java文件的保存编码(点击文件-->属性-->text file encoding(other的值),这是使用eclipse 编译器)

通过以下的代码即可证明:

/**
* Test.java源代码文件
*/
public class Test {
public static void main(String[] args) {
System.out.println(System.getProperty("file.encoding"));
//Test2.printEncoding();
}
}

1、文件保存的编码为:GB2312 时

编译执行之后,得到的结果为:

GB2312 

2、文件保存的编码为:GBK 时

编译执行之后,得到的结果为:

GBK

3、文件保存的编码为:UTF-8时

编译执行之后,得到的结果为:

UTF-8

从上面的三个结果可以看出,file.encoding的值并不是操作系统os的默认编码

而是main入口函数所在的类的保存编码.

但是这时想到了另一个问题,

问题2:是不是每个java文件都有自己的file.encoding呢?

于是我写了另一个类做试验,添加了类文件Test2.java

/**
* Test2.java源代码文件
*/
public class Test2 {
public static void printEncoding(){
System.out.println(System.getProperty("file.encoding"));
}
}

并将源文件Test.java的代码修改为:

/**
* Test.java源代码文件
*/
public class Test {
public static void main(String[] args) {
System.out.println(System.getProperty("file.encoding"));
Test2.printEncoding();//添加了这个命令
}
}

这时我将Test.java的保存编码设置为:utf-8

将Test2.java的保存编码设置为:GBK

根据问题2我最原始的假设那么

编译运行这两个文件之后得到的结果应该为:

utf-8
GBK

  

但事实是运行后的结果为:

utf-8
utf-8

于是得出了结论是:

在一个运行的应用程序中

file.encoding的值只有一个,并且值为入口函数的保存编码的值

 

至于file.encoding在代码中的代码有哪些应用,以后更深入时再讨论

 

posted on 2011-11-04 09:44  silentjesse  阅读(15204)  评论(6编辑  收藏  举报