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

来源:互联网 发布:网络爬虫需要什么软件 编辑:程序博客网 时间:2024/06/05 00:31
首先编码规则就不介绍了,可以百度。


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之间就能正确装换,因为他们之间有共同的字符。


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

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

说明:个人见解。

原创粉丝点击