java 字符编码 解码 转码 识别编码

首先编码规则就不介绍了,可以百度。


1、字符的编码:new String(byte[] ,CharSet);
根据:相应的编码规则,比如GBK是两个字节编码一个字符,那么将字节数组,每两个一个单位
 翻译成一个数字,在用这个数字查找GBK的字符集,[C4,E3]在GBK中表示的汉子“你”。
new String([c4 e3],"gbk"):你
new String([e4 bd a0],"utf-8"):你
new String([c4 e3],"gb2312"):你
new String([3f],"iso8859-1"):<?>
2、字符的解码:
根据:与编码的规则相反,比如我们看到一个字符“你”,是用GBK编码过后显示的字符,那么我们在字符集中找到


“你”对应的数字XXX([C4,e3]),然后在根据GBK的编码方式,将XXX翻译成[C4,E3].然后我们就得到了C4,E3,.就


对“你”进行了解码
String source = "你";(该字符是写在GBK的文本文件中)
source.getBytes("gbk"):c4 e3
source.getBytes("utf-8"):e4 bd a0
source.getBytes("gb2312"):c4 e3
source.getBytes("iso-8859-1"):3f(表示没有相应的字符想对应)
3、字符转码:
1、首先我们要知道字节序列的编码方式。目前java有一个开源的项目cpdetector可以自动探测编码方式。
2、然后我们要根据字节序列和相应的编码方式“编译”成相应的字符。
3、在根据2步中字符在需要转换成的字符集中查找相应的“数字”(比如[gbk]“你”(C4E3),[UTF-


8]"你"((E4,BD,A0)),他们之间的转码需要“你”这个汉子作为一个桥梁
4、找到了目标编码的字节,也知道了目标的字符编码方式。
5、创建一个新的字符 new String(目标字节数组,目标字符集)
说明:1、字符转码是需要条件的
      2、不是任意的字符都能成功转换成另一种字符
 条件:1、需要被转换的源字符编码必须正确(字节序列和字符的编码必须确定)
          因为确少一个就可能导致源字符就不正确,这样转码是不能成功的
       2、比如在GBK 的字符要转换成 iso-8859-1 ,这明显就是不能成功的,因为在ISO-8859-1
          中就没有gbk的字符。GBK 与utf-8之间就能正确装换,因为他们之间有共同的字符。


自动探测字节序列的编码:
 这个思路是,只能根据每一种编码规则去解析字节序列,如果用这种编码规则能正确解析所有的字节序列
 那么他就有可能是这一种编码。---只是有可能。比如用这种编码规则能够保证“编译”成字符是能够成功
 但是和我们看到的结果就可能又差距,比如出现了我们不认识的字符。但是这样我们也不能判断这个规则是

 错误的。所以:自动探测的结果不一定是我们预期的。

说明:个人见解。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值