首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

深入理解String.getBytes()中编码有关问题

2012-10-06 
深入理解String.getBytes()中编码问题查看jdk的源码得知,String.getBytes()的源码如下:public static Char

深入理解String.getBytes()中编码问题
查看jdk的源码得知,String.getBytes()的源码如下:
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;
    }


可知道: 1.首先获取JVM的默认编码,这个默认编码在java虚拟机启动的时候从操作系统里面的locale和charset获取
2. 如果获取不到默认的JVM默认编码,从字符串所在的文件的编码中获取

3.如果以上都获取不到,那么直接取UTF-8 编码


getBytes()默认使用的编码,是由Charset.defaultCharset()或者System.getProperty("file.encoding")参数决定的。
1、直接运行java的main函数可以证明。

2、但是为什么有些容器下,比如tomcat,解码用的不是操作系统编码,那是因为tomcat启动时,通过设置上面参数搞定的。在启动脚本里面设置file.encoding=UTF-8


热点排行