-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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值