1 分钟带你认识从 "�" 到 "锟斤拷"

作者 | 石头哥? 责编 | 八宝粥
以一首五言绝句作为开篇,你知道背后说的是什么吗?
手持两把锟斤拷
口中疾呼烫烫烫
脚踏千朵屯屯屯
笑看万物锘锘锘

? 为何物?
在前不久石头哥的这篇文章中 ——?你可能也会掉进这个简单的 String 的坑,讲述了因字符编码问题而连续踩坑的经历,文中有一个神奇的字符 “?”。
其实,这个?“?” 真是无处不在,比如大名鼎鼎的微信:

再比如,封面图中,单价22元的“锟斤拷锟斤拷”,再随便百度一把:

要弄清这个问题,还得先从编码谈起。
因为在计算机的眼里,都是二进制,具体用哪些二进制数字表示哪个符号,这就是编码。不要把编码想象得太复杂,其实就是一个很简单的 mapping。
比如大家所熟知的 ASCII 编码,规定了 二进制的0100 0001,也就是十进制的65,代表的含义就是大写字母?A。

??也是一种编码字符,就跟上面的 A 一样一样的,它是 UNICODE 编码方式中的一个特殊的字符,也就是 0xFFFD(65533),语义是一个占位符,用来表达这套编码系统中未知的,自己不认识的东西。
比如上篇文章中的实验截图的,红色部分圈出来的对应的字符,UTF-8 编码都不认识,所以按照 UNICODE 的定义,我就只好用统一的一个占位符 ——?0xFFFD(65533)?来表示。


为什么会出现“锟斤拷”?

如上图所示,第 18 行的字节数组?new byte[] {-25, -119, -25, -116},UTF-8?恰好都不认识,因此只能用占位符替换。

这种情况,在编码转换过程中确实也比较常见,如果双方没沟通清楚,确实很容易出现互相不认识的情况。
在中文系统中,常见的字符编码是 GBK,这个时候,因为大家没提前商量清楚,我就默认按照 GBK 给你编码看看。

惊不惊喜意不意外……
其实是因为,??用?UTF-8?编码后变成了?0xEFBFBD(就是上面的字节数组?[-17, -65, -67]),两个连起来就是?0xEFBFBDEFBFBD,也就是上面的字节数组[-17, -65, -67, -17, -65, -67]。
而 GBK 编码依然采用双字节编码方案,因此上面的 6 字节?0xEFBFBDEFBFBD,就被拆成了 3 个 2 字节字符即?0xEFBF, 0xBDEF, 0xBFBD?对应 GBK 编码里面就是:锟(0xEFBF),斤(0xBDEF),拷(0xBFBD)。



现在,你知道了吗?
留个作业题:开篇的五言绝句,你知道另外的梗是来自哪里吗?欢迎留言讨论。


?女朋友的一个建议,这位程序员创立仅 551 天公司就被 10?亿美元收购了
?抽成 30% 的苹果税是良心价?谷歌也学“坏”了
?“面向对象就是一个错误!”
?回溯 Rust 2020:正在成为最受欢迎的编程语言
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 习近平将发表二〇二六年新年贺词 7904141
- 2 2026年国补政策来了 7808738
- 3 东部战区:开火!开火!全部命中! 7712893
- 4 2026年这些民生政策将惠及百姓 7616985
- 5 小学食堂米线过期2.5小时被罚5万 7519709
- 6 解放军喊话驱离台军 原声曝光 7428214
- 7 为博流量直播踩烈士陵墓?绝不姑息 7327605
- 8 每月最高800元!多地发放养老消费券 7238391
- 9 数字人民币升级 1月1日起将计付利息 7141831
- 10 2026年1月1日起 一批新规将施行 7040675










CSDN
