這個話題來自: Nutz的issue 361
在考慮這個issue時, 我一直傾向于使用系統變量file.encoding來改變JVM的默認編碼.
今天,我想到, 這個系統變量,對JVM的影響到底有多大呢?
我使用最簡單的方法看看這個變量的影響–在JDK 1.6.0_20的src.zip文件中,查找包含file.encoding字眼的文件.
共找到4個, 分別是:
先上重頭戲 java.nio.Charset類:
View Code JAVA
public static Charset defaultCharset() { if (defaultCharset == null) { synchronized (Charset.class) { java.security.PrivilegedAction pa = new GetPropertyAction("file.encoding"); String csn = (String)AccessController.doPrivileged(pa); Charset cs = lookup(csn); if (cs != null) defaultCharset = cs; else defaultCharset = forName("UTF-8"); } } return defaultCharset; } |
java.net.URLEncoder的靜態構造方法,影響到的方法 java.net.URLEncoder.encode(String)
View Code JAVA
com.sun.org.apache.xml.internal.serializer.Encoding的getMimeEncoding方法(209行起)
View Code JAVA
最后一個javax.print.DocFlavor類的靜態構造方法:
View Code JAVA
可以看到,系統變量file.encoding影響到
1. Charset.defaultCharset() Java環境中最關鍵的編碼設置
2. URLEncoder.encode(String) Web環境中最常遇到的編碼使用
3. com.sun.org.apache.xml.internal.serializer.Encoding 影響對無編碼設置的xml文件的讀取
4. javax.print.DocFlavor 影響打印的編碼
故,影響還是很大的哦, 可以說是Java中編碼的一個關鍵鑰匙!