A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡文彬 中级黑马   /  2014-3-8 21:47  /  1119 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果一个中文文字用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  
????//这里的问号代表不同的字节值
你好
————————————————————————————

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
问号是通配符。

你这种情况多半是没有安装对应字符集或者对应字符集里没有对应区位码所对应字节。
回复 使用道具 举报
不是多个值代表?
而是当编码表中没有对应的值时就用?表示
这里
-60  -29  -70  -61  
四个值在编码表里都找不到对应的值,所以就返回你四个?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马