Charset.defaultCharset()
Charset.defaultcharset(),默认是操作系统的编码,可以设置-Dfile.encoding=UTF-8,来更改
Charset.defaultcharset()。
Charset.defaultcharset()。
Charset.defaultcharset()指的是jvm输入流、输出流默认使用的编码/解码方式。
-Dfile.encoding
file.encoding,是系统属性,它可以影响Charset.defaultcharset()。注意jvm启动后,虽然可以
通过System.setProperty(“file.encoding”,”GBK”)修改属性值,但仅仅是修改了file.encoding这个属性值,并不会影响Charset.defaultcharset。因为jvm启动时就已经设置了,Charset.defaultcharset()。
通过System.setProperty(“file.encoding”,”GBK”)修改属性值,但仅仅是修改了file.encoding这个属性值,并不会影响Charset.defaultcharset。因为jvm启动时就已经设置了,Charset.defaultcharset()。
-Dfile.encoding最终影响的是reader和writer,reader时,将二进制编码为字符,需要编码方式。writer时,将字符编码为二进制,需要编码方式。
-Dfile.encoding与Charset.defaultCharset()的关系
在启动jvm时,通过-Dfile.encoding来设置Charset.defaultcharset(),但启动后,Charset.defaultcharset()就不能再改变;
比如:java -Dfile.encoding HelloWorld
Charset.defaultcharset的作用
Charset.defaultcharset就是“操作系统编码”它会影响java 输入流、输出流默认的编码解码。
比如
//-Dfile.encoding=utf8
String s = "哈哈";
byte[] b = s.getBytes();//编码,以utf-8编码,等同于s.getBytes("utf-8")
System.out.println(new String(b));//正常,因为以utf-8编码
System.out.println(new String(b,"gbk"));//乱码,因为以gbk编码
再换个例子看
file.encoding=utf-8,影响了Charset.defaultcharset(),从而“中”.getBytes() 3个字节
file.encoding=GBK,影响了Charset.defaultcharset(),从而“中”.getBytes() 2个字节
file.encoding=utf-16,影响了Charset.defaultcharset(),从而“中”.getBytes() 4个字节
charset.defaultcharset受执行“客户端环境”影响
如果,我们不设置-Dfile.encoding,
charset.defaultcharset受执行“客户端环境”影响。
charset.defaultcharset受执行“客户端环境”影响。
1、eclipse中,分别写了utf8、utf16编码的两个java文件,打印c
harset.defaultCharset,结果分别为utf-8,utf-16
harset.defaultCharset,结果分别为utf-8,utf-16
这是因为eclipse可能在执行java HelloWorld时,传入了-Dfile.encoding导致的
2、客户端(windows命令行,默认就是gbk代码页)中,不指定file.encoding,这俩文件都输出gbk
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/20277.html