专栏名称: Python之禅
分享Python相关技术干货,偶尔扯扯其它的
目录
相关文章推荐
Python中文社区  ·  用 DeepSeek 快速打造自己的 AI ... ·  昨天  
逆行的狗  ·  碎片时间刷CIA题-Anki牌组 ·  18 小时前  
逆行的狗  ·  碎片时间刷CIA题-Anki牌组 ·  18 小时前  
Python开发者  ·  DeepSeek 下棋靠忽悠赢了 ... ·  5 天前  
Python爱好者社区  ·  python接私活,yyds ·  3 天前  
Python爱好者社区  ·  DeepSeek 最新中国大学排名 ·  3 天前  
51好读  ›  专栏  ›  Python之禅

从 "�" 到 "锟斤拷",这都是些啥玩意?

Python之禅  · 公众号  · Python  · 2021-02-22 18:40

正文

来源 | 程序猿石头

作者 | 石头哥
以一首 七言绝句作为开篇,你知道背后说的是什么吗?

手持两把 锟斤拷,

口中疾呼 烫烫烫。

脚踏千朵 屯屯屯,

笑看万物 锘锘锘。

� 为何物?

其实,这个 “ ” 真是无处不在,比如大名鼎鼎的微信:

微信中的�

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

随处可见的�

要弄清这个问题,还得先从编码谈起。

因为在计算机的眼里,都是二进制,具体用哪些二进制数字表示哪个符号,这就是编码。不要把编码想象得太复杂,其实就是一个很简单的 mapping。

比如大家所熟知的 ASCII 编码,规定了二进制的 0100 0001 ,也就是十进制的 65 ,代表的含义就是大写字母 A

ASCII 编码

也是一种编码字符,就跟上面的 A 一样一样的,它是 UNICODE 编码方式中的一个特殊的字符,也就是 0xFFFD(65533),语义是一个占位符,用来表达这套编码系统中未知的、自己不认识的东西。

比如下面的实验截图,红色部分圈出来的对应的字符,UTF-8 编码都不认识,所以按照 UNICODE 的定义,就只好用统一的一个占位符 —— 0xFFFD(65533) 来表示。

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

我们接着来看, 如下图所示,仍然从 “程序猿石头” 对应二进制编码截取部分:

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

这种情况,在编码转换过程中确实也比较常见,如果双方没沟通清楚,确实很容易出现互相不认识的情况。

在中文系统中,常见的字符编码是 GBK,这个时候,因为大家没提前商量清楚,我就默认按照 GBK 给你编码看看。

“锟斤拷”在此

惊不惊喜意不意外……







请到「今天看啥」查看全文


推荐文章
逆行的狗  ·  碎片时间刷CIA题-Anki牌组
18 小时前
逆行的狗  ·  碎片时间刷CIA题-Anki牌组
18 小时前
Python爱好者社区  ·  python接私活,yyds
3 天前
Python爱好者社区  ·  DeepSeek 最新中国大学排名
3 天前
漫心情  ·  感情,不要给不懂珍惜的人
7 年前
脑洞故事板  ·  七号鱼馆 | 贪鱼
7 年前