系统变量file.encoding对Java的运行影响有多大?(转)good
這個(gè)話題來自: Nutz的issue 361
在考慮這個(gè)issue時(shí), 我一直傾向于使用系統(tǒng)變量file.encoding來改變JVM的默認(rèn)編碼.
今天,我想到, 這個(gè)系統(tǒng)變量,對JVM的影響到底有多大呢? 我使用最簡單的方法看看這個(gè)變量的影響--在JDK 1.6.0_20的src.zip文件中,查找包含file.encoding字眼的文件. 共找到4個(gè), 分別是: 先上重頭戲 java.nio.Charset類:
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的靜態(tài)構(gòu)造方法,影響到的方法 java.net.URLEncoder.encode(String)
static { dontNeedEncoding = new BitSet(256); int i; for (i = 'a'; i < = 'z'; i++) { dontNeedEncoding.set(i); } for (i = 'A'; i <= 'Z'; i++) { dontNeedEncoding.set(i); } for (i = '0'; i <= '9'; i++) { dontNeedEncoding.set(i); } dontNeedEncoding.set(' '); /* encoding a space to a + is done * in the encode() method */ dontNeedEncoding.set('-'); dontNeedEncoding.set('_'); dontNeedEncoding.set('.'); dontNeedEncoding.set('*'); dfltEncName = (String)AccessController.doPrivileged ( new GetPropertyAction("file.encoding") ); }com.sun.org.apache.xml.internal.serializer.Encoding的getMimeEncoding方法(209行起)
static String getMimeEncoding(String encoding) { if (null == encoding) { try { // Get the default system character encoding. This may be // incorrect if they passed in a writer, but right now there // seems to be no way to get the encoding from a writer. encoding = System.getProperty("file.encoding", "UTF8"); if (null != encoding) { /* * See if the mime type is equal to UTF8. If you don't * do that, then convertJava2MimeEncoding will convert * 8859_1 to "ISO-8859-1", which is not what we want, * I think, and I don't think I want to alter the tables * to convert everything to UTF-8. */ String jencoding = (encoding.equalsIgnoreCase("Cp1252") || encoding.equalsIgnoreCase("ISO8859_1") || encoding.equalsIgnoreCase("8859_1") || encoding.equalsIgnoreCase("UTF8")) ? DEFAULT_MIME_ENCODING : convertJava2MimeEncoding(encoding); encoding = (null != jencoding) ? jencoding : DEFAULT_MIME_ENCODING; } else { encoding = DEFAULT_MIME_ENCODING; } } catch (SecurityException se) { encoding = DEFAULT_MIME_ENCODING; } }最后一個(gè)javax.print.DocFlavor類的靜態(tài)構(gòu)造方法:
static { hostEncoding = (String)java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("file.encoding")); }可以看到,系統(tǒng)變量file.encoding影響到
1. Charset.defaultCharset() Java環(huán)境中最關(guān)鍵的編碼設(shè)置
2. URLEncoder.encode(String) Web環(huán)境中最常遇到的編碼使用
3. com.sun.org.apache.xml.internal.serializer.Encoding 影響對無編碼設(shè)置的xml文件的讀取
4. javax.print.DocFlavor 影響打印的編碼
故,影響還是很大的哦, 可以說是Java中編碼的一個(gè)關(guān)鍵鑰匙!
http://wendal.net/232.html
總結(jié)
以上是生活随笔為你收集整理的系统变量file.encoding对Java的运行影响有多大?(转)good的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程系列之学习多线程下载的基本原理和基
- 下一篇: keepalived实现lvs高可用并负