Java中的编码问题

定义一个字符串,内容是“中文”

java文件保存为GBK编码 “中文”两个字的二进制形式为:d6 d0 ce c4
class文件保存为UTF8编码,“中文”两个字的二进制形式为:e4 b8 ad e6 96 87
class被载入内存之后表现为Unicode编码,每个字符占两个字节,二进制形式为:4e 2d 65 87

自己总结的一些规律:
1.计算机中信息的保存就是二进制的字节流和编码来确定的,可以表示成一个二元组(bytes,encoding),每个信息的真值对应多个这样的二元组,当然encoding是不同的。
2.编码之间的转换也就是这样的二元组之间的转换,转换的依据就是两个二元组拥有同样的真值。
3.因为某一个真值不一定在所有字符集中都有对应的二元组,所以映射时会产生未定义的行为。举例说明一下:设a,b为字节串,A,B为对应的字符集,当(a,A)转换为(b,B)时,如果a在它所声称的字符集中不能找到,则不能完成映射,因为不能推测真值;如果找到的真值在字符集B中没有对应,也不能完成映射。
4.当二元组中的编码信息丢失或者指定错误时,就会出现乱码。因为encoding不和bytes保存在一起,很容易忘记。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值