系统变量file.encoding对Java的运行影响有多大?(转)good
这个话题来自: Nutz的issue 361
在考虑这个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中编码的一个关键钥匙!
http://wendal.net/232.html
系统变量file.encoding对Java的运行影响有多大?(转)good的更多相关文章
- jvm file.encoding 属性引起的storm/hbase乱码
		1. 问题 今天为storm程序添加了一个计算bolt,上线后正常,结果发现之前的另一个bolt在将中文插入到hbase中后查询出来乱码.其中字符串是以UTF-8编码的url加密串,然后我使用的URL ... 
- file.encoding到底指的是什么呢?
		转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50918506 <Java利用System.getProperty(“file. ... 
- System.getProperty()方法获取系统变量
		来自我的CSDN博客 今天在阅读JDBC的DriverManager类源码时,看到了这么一句代码: System.getProperty("jdbc.drivers"): ... 
- mysql show variables系统变量详解
		mysql系统变量详解 mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选 ... 
- MySQL的变量--系统变量、状态变量
		MySQL的变量分为以下两种:1)系统变量:配置MySQL服务器的运行环境,可以用show variables查看2)状态变量:监控MySQL服务器的运行状态,可以用show status查看 一.系 ... 
- 深入理解mysql-进阶知识点,启动项、系统变量、字符集介绍!
		mysql数据库是当前应用最为的广泛的数据库,在实际工作中也经常接触到.真正用好mysql也不仅仅是会写sql就行,更重要的是真正理解其内部的工作原理.本文先从宏观角度介绍一些mysql相关的知识点, ... 
- Jenkins maven 构建乱码,修改file.encoding系统变量编码为UTF-8
		一切都是windows的控制台默认编码GBK问题 情景: 使用jenkins构建,console 输出的中文乱码.代码编码格式是utf-8,因为Jenkins会默认读取当前系统的编码格式,导致构建日志 ... 
- java 获取系统变量(环境变量和设置变量)
		前言 环境变量这个概念不陌生, 就是操作系统的环境变量. 系统变量就是java本身维护的变量. 通过 System.getProperty 的方式获取. 对于不同的操作系统来说, 环境变量的处理可能会 ... 
- java中获取系统变量
		System.getProperty("java.version") 用来获取系统变量.getProperty()这个方法是获取指定键指示的系统属性的.以下是通过System.ge ... 
随机推荐
- Flexigrid的编辑功能
			editCells:function(){ if(!isEditing){ isEditing = true; $('tbody tr',$(t)).each(function () { for(va ... 
- C#:总结页面传值几种方法
			小知识点: 1. W7自带 .NetFrameWork 3.5, 兼容模式为 高版本号兼容低版本号: 2. WF和WPF都是基于XAML的,可是两者的用途不同. WF是一种开发框架,将工作流嵌入在. ... 
- 一道经典的C++结构体的题目
			题目描述: 有10个学生,每个学生的数据包括学号.姓名.英语.数学.物理三门课的成绩,从键盘输入10个学生数据,要求打印出3门课程的总平均成绩,以及最高分的学生的数据(包括学号,姓名,3门课的平均成绩 ... 
- 微信或手机浏览器在线显示office文件(已測试ios、android)
			近期开发微信企业号,发现微信andriod版内置浏览器在打开文件方面有问题,可是ios版没有问题.原因是ios版使用的是safari浏览器 支持文档直接打开.可是andriod版使用的是腾讯浏览器x5 ... 
- iTunes Store:隐藏和取消隐藏已购项目
			使用 Mac 或 PC 上的 iTunes 来隐藏或取消隐藏已购项目. 如何隐藏已购项目 在 Mac 或 PC 上打开 iTunes. 从 Store 菜单中,选取商店 > 登录,然后输入您的 ... 
- .Net 社区虚拟大会”(dotnetConf)
			.Net 社区虚拟大会”(dotnetConf) “.Net 社区虚拟大会”(dotnetConf) 2016 今天凌晨在Channel9 上召开,在Scott Hunter的30分钟的 Keynot ... 
- Linux中TCP wrapper的使用
			Linux中TCP wrapper的使用 tcpwrapper的目的是对那些访问控制功能较弱的服务提供访问控制功能要想了解访问控制就必须先知道服务监听的概念: 服务监听的两种方式: listen ... 
- javascript iframe 视频解码
			function confirmVdo(){ var videoVal = $(".video_src").val(); if(videoVal){ videoVal = vide ... 
- ARMv8 Linux内核head.S源码分析
			ARMv8Linux内核head.S主要工作内容: 1. 从el2特权级退回到el1 2. 确认处理器类型 3. 计算内核镜像的起始物理地址及物理地址与虚拟地址之间的偏移 4. 验证设备树的地址是否有 ... 
- POJ - 1185 炮兵阵地 (状态压缩)
			题目大意:中文题目就不多说大意了 解题思路: 1.每行最多仅仅有十个位置,且不是山地就是平原,那么就能够用1表示山地,0表示平原,将每一行的状态进行压缩了 2.接着找出每行能放炮兵的状态.先不考虑其它 ... 
