为什么会出现锟斤拷?

一句话解释

gbk 编码文件,utf8的解析器不认得,因此返回了容错字符,容错字符被gbk翻译回了汉字

实例演示

  1. 创建一个文本, 以gbk(或者相兼容的GB18030)保存一段字符
  2. 再用UTF-8编码打开这个文件,随便输入一个字符,使编辑器以 utf-8 编码保存当前文件
  3. 再用 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
扩展:国外程序员也烫屯锟斤拷吗?

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值