黑马程序员技术交流社区

标题: 为什么问号可以表示不同的字节值 [打印本页]

作者: 胡文彬    时间: 2014-3-8 21:47
标题: 为什么问号可以表示不同的字节值
如果一个中文文字用gbk编码成字节后,再用iso8859-1进行解码,则结果为:全是问号。让我奇怪的是虽然全是问号,但每个问号代表不同的字节。这使得可以用iso8859-1进行编码,然后用gbk解码出来原来信息.如果将iso8859-1换成utf-8,他出现的问号代表同一个值。所以我想问iso8859-1是怎么实现同样的问号代表不同的字节的???

————————————————————————————————————
public static void main(String[] args) throws UnsupportedEncodingException {
                String s="你好";
                byte []buf=s.getBytes("gbk");//用gbk编码,获得字节数组
                printbit(buf);//打印数组
                System.out.println();
                String str=new String(buf,"iso8859-1");//解码
                System.out.println(str);//解码错误,打印未知字符?
                byte []bufs=str.getBytes("iso8859-1");//编码,获得原始字节数组
                String str1=new String(bufs,"gbk");//解码,获得原始信息“你好”
                System.out.println(str1);
                //printbit(buf);

        }
运行结果:
-60  -29  -70  -61  
????//这里的问号代表不同的字节值
你好
————————————————————————————
作者: 残梦共飞雪    时间: 2014-3-8 22:26
问号是通配符。

你这种情况多半是没有安装对应字符集或者对应字符集里没有对应区位码所对应字节。
作者: 徐芾清    时间: 2014-3-8 22:40
不是多个值代表?
而是当编码表中没有对应的值时就用?表示
这里
-60  -29  -70  -61  
四个值在编码表里都找不到对应的值,所以就返回你四个?




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