java的默认编码方案是什么?
通常我们需要这样做,
public static void main(String[] args) { String s="中国"; byte[] bytes = s.getBytes(); String s2 = new String(bytes); }
那么将unicode字符串转为字节数组或者将字节数组转为字符串是按照什么编码呢?
在java中获取编码方案,
public static void main(String[] args) { //方法一 System.out.println(System.getProperty("file.encoding")); //方法二 System.out.println(Charset.defaultCharset()); }
再进入defaultCharset方法,
public static Charset defaultCharset() { if (defaultCharset == null) { synchronized (Charset.class) { String csn = AccessController.doPrivileged( new GetPropertyAction("file.encoding")); Charset cs = lookup(csn); if (cs != null) defaultCharset = cs; else defaultCharset = forName("UTF-8"); } } return defaultCharset; }
可以看到,这里获取了file.encoding属性,并通过该属性查找到了对应的Charset对象,如果找不到该属性所对应的Charset,就默认返回utf-8(所有Charset名字的参数均大小写等价)Charset。说明在值合理的情况下,file.encoding属性确实决定了所谓的默认编码。
知道了作用,并且作用不小,那我们来看看到底是什么决定了file.encoding属性。
创建一个简单的java类,
public class Test { public static void main(String[] args) { //方法一 System.out.println(System.getProperty("file.encoding")); //方法二 System.out.println(Charset.defaultCharset()); } }
使用javac编译,然后使用java运行。
第一次不指定file.encoding
可以看出java使用了操作系统默认的编码方案。
第二次指定file.encoding=utf-8
可以看出默认编码方案改为了utf-8
第三次指定一个不存在的编码,file.encoding=aaa
结论:由上边可以看出java默认编码方案主要是由-Dfile.encoding来控制,如果没有指定那么就使用系统默认编码方案,如果指定但是不存在那么使用utf-8编码。