-Dfile.encoding与Charset.defaultCharset详解编程语言

Charset.defaultCharset()

Charset.defaultcharset(),默认是操作系统的编码,可以设置-Dfile.encoding=UTF-8,来更改
Charset.defaultcharset()
Charset.defaultcharset()指的是jvm输入流、输出流默认使用的编码/解码方式。

-Dfile.encoding

file.encoding,是系统属性,它可以影响Charset.defaultcharset()。注意jvm启动后,虽然可以
通过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受执行“客户端环境”影响。
1、eclipse中,分别写了utf8、utf16编码的两个java文件,打印c
harset.defaultCharset,结果分别为utf-8,utf-16
这是因为eclipse可能在执行java HelloWorld时,传入了-Dfile.encoding导致的
2、客户端(windows命令行,默认就是gbk代码页)中,不指定file.encoding,这俩文件都输出gbk

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/20277.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论