`
lianggo
  • 浏览: 3274 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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保存在一起,很容易忘记。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics