打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
系统变量file.encoding对Java的运行影响有多大?

在考虑这个issue时, 我一直倾向于使用系统变量file.encoding来改变JVM的默认编码.

今天,我想到, 这个系统变量,对JVM的影响到底有多大呢?我使用最简单的方法看看这个变量的影响–在JDK 1.6.0_20的src.zip文件中,查找包含file.encoding字眼的文件.共找到4个, 分别是:先上重头戏 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的静态构造方法,影响到的方法 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;            }        }

最后一个javax.print.DocFlavor类的静态构造方法:

    static {    hostEncoding =         (String)java.security.AccessController.doPrivileged(                  new sun.security.action.GetPropertyAction("file.encoding"));    }

可以看到,系统变量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中编码的一个关键钥匙!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
idea maven 乱码 控制台
Java字符编码设置总结
java 字符编码处理
Java中文&编码问题小结 - 笨笨的思想片断 - BlogJava
解决web服务器各种应用的乱码问题,欢迎补充和讨论
Java平台国际编码问题分析_SUN-JAVA技术
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服