黑马程序员技术交流社区

标题: 关于字符编码运行时的问题 [打印本页]

作者: 影凡    时间: 2014-1-6 23:59
标题: 关于字符编码运行时的问题
先上代码:
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 个错误
理论上编译的时候应该是没有问题的啊,运行出来是二进制的数字的~
可是编译时就报错了,求解释?

作者: 周志彬    时间: 2014-1-7 08:44
这里涉及到UTF-8编码的规则和GBK编码的规则。utf-8的编码规则是一个字节,也可能是两个字节,最多三个字节。汉字最少两个。但是解码的时候,怎么知道什么时候要两个字节,什么时候要三个字节,什么时候要1个字节)

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


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

8e33241bge0706da4e315&690.jpg

作者: 周志彬    时间: 2014-1-7 08:46
11000001
10101010

11001101
10101000


这是用gbk编码得到的字节
刚好与utf-8解码规则符合
作者: 影凡    时间: 2014-1-7 16:11
我的记事本用的是UTF-8编码表,但是我不是在记事本里看的,我是在编译的时候dos窗口里报的错误,和用哪个编码表是不相关的啊~




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