黑马程序员技术交流社区

标题: 编码解码问题 [打印本页]

作者: 禅伤    时间: 2014-8-4 14:47
标题: 编码解码问题
直接先上代码:
//编码
                String s="你好";
                byte[] b=s.getBytes();//编码,默认gbk编码
                String s1=new String(b,"iso8859-1");//解码
                System.out.println(Arrays.toString(b));
                System.out.println(s1);
               
                //采用iso8859-1编码并获取字节组
                byte[] b1=s1.getBytes("iso8859-1");//编码
                String s2=new String(b1,"utf-8");//解码
                System.out.println(Arrays.toString(b1));
                System.out.println(s2);


输出结果:
[-60, -29, -70, -61]
????
[-60, -29, -70, -61]
???

问:        byte[] b1=s1.getBytes("iso8859-1");//采用“iso8859-1"编码后获得字节数组[-60, -29, -70, -61]后 再采用”utf-8“格式进行解码应该是3个字节一个字符吧,因此最多应该有两个未识别的问号吧 为什么有3个?

作者: fantacyleo    时间: 2014-8-4 16:22
utf-8的编码长度从1-3不等,所以有可能出现3个问号
作者: 未名以律    时间: 2014-8-4 16:57
GBK--->ISO-8859-1--->UTF-8
UTF-8--->ISO-8859-1--->GBK
的字节直接转码则可能导致乱码,需要另外的转换过程。
byte[] b1=s1.getBytes("iso8859-1");//编码
String s2=new String(b1,"utf-8");//解码
在iso8859-1中同样是4个原始字节,但是已经是乱码了,于是utf-8就有些每3个一组进行解析,有些每个1组进行解析,有些每2个一组进行解析,于是原来4个字节的数据无法正常的解析成UTF-8的数据,所以也是乱码,是3个?

作者: 禅伤    时间: 2014-8-4 16:58
fantacyleo 发表于 2014-8-4 16:22
utf-8的编码长度从1-3不等,所以有可能出现3个问号

我也知道这个,但什么情况下会出现3个问号?
作者: fantacyleo    时间: 2014-8-4 17:04
禅伤 发表于 2014-8-4 16:58
我也知道这个,但什么情况下会出现3个问号?

既然1-3字节都可以形成编码,那么3个问号不是很容易解释么?比如-60 、-29分别对应1个问号。-70和-
61合起来对应一个问号。当然,具体的对应得去查码表和编码规则了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2