一句话解释
gbk 编码文件,utf8的解析器不认得,因此返回了容错字符,容错字符被gbk翻译回了汉字
实例演示
- 创建一个文本, 以gbk(或者相兼容的GB18030)保存一段字符
- 再用UTF-8编码打开这个文件,随便输入一个字符,使编辑器以 utf-8 编码保存当前文件
- 再用 gbk 打开这个文件
在上述过程的第一步中,我们按GBK编码保存了"汉"字,按GBK编码后十六进制为: BA BA, 对应二进制: 10111010 10111010 。在第2步中,我们用UTF-8的规则去读GBK的编码结果, 编辑器读入第一个字节 10111010, 按UTF-8的规则,这个值没有对应的映射,因此会显示为"�",表明这是一个无效码值.接下来,我们又用UTF-8的规则去保存之前GBK编码,但由于存在无效的UTF-8码值, 编辑器将这些无效码值转为:EF BF BD (这个值被UTF-8用于表示无效码值).于是 BA BA 就被转为了 EF BF BD EF BF BD UTF-8是变长编码,如果高位是0开头则表明是一个 7-bit单字节字符; 而对于多字节字符,用第一个byte中高位1的数量来记录一个字符占有字节的数量,比如 1110 0000,有3个1表明是一个3字节字符, 后面还会跟着两个字节,它们是一个整体,合起来用于表示一个3字节字符. 当前例子中的 10111010 , 前面一个1,排除是多字节的可能; 视为单字节的话,这个值处于80~FF这个区间,不在UTF-8的编码范围内,所以只好显示为"�" 在第3步我们用GBK去读取 EF BF BD EF BF BD ,而在GBK的编码表里,它们对应的字符为: “锟斤拷”.
链接:https://www.zhihu.com/question/23024782/answer/1690048685
扩展:国外程序员也烫屯锟斤拷吗?