黑马程序员技术交流社区
标题:
关于字符编码运行时的问题
[打印本页]
作者:
影凡
时间:
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)
下载附件
2014-1-7 08:43 上传
作者:
周志彬
时间:
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