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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 影凡 中级黑马   /  2014-1-6 23:59  /  1154 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

先上代码:
class EncodeDemo2
{
        public static void main(String[] args)throws Exception
        {
                String s = "联通";
               
                byte[] by = s.getBytes("GBK");
                for(byte b:by)
                {
                        System.out.println(Integer.toBinaryString(b));
                }
               
        }
}
“联通”这两汉字很特殊,我在运行代码时出现了这样的情况:
EncodeDemo2.java:5: 错误: 编码GBK的不可映射字符
                String s = "鑱旈?";
                              ^
1 个错误
理论上编译的时候应该是没有问题的啊,运行出来是二进制的数字的~
可是编译时就报错了,求解释?

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

3 个回复

倒序浏览
这里涉及到UTF-8编码的规则和GBK编码的规则。utf-8的编码规则是一个字节,也可能是两个字节,最多三个字节。汉字最少两个。但是解码的时候,怎么知道什么时候要两个字节,什么时候要三个字节,什么时候要1个字节)

"联通"二字的gbk编码正好符合utf-8的编码规律。所以记事本使用了UTF-8编码。进行解码
给你附带一张关于解码的截图


8e33241bge0706da4e315&690.jpg (74.73 KB, 下载次数: 7)

8e33241bge0706da4e315&690.jpg
回复 使用道具 举报
11000001
10101010

11001101
10101000


这是用gbk编码得到的字节
刚好与utf-8解码规则符合

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
我的记事本用的是UTF-8编码表,但是我不是在记事本里看的,我是在编译的时候dos窗口里报的错误,和用哪个编码表是不相关的啊~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马