您现在的位置是:亿华云 > 应用开发
1 分钟带你认识从 "?" 到 "锟斤拷"
亿华云2025-10-09 03:17:49【应用开发】2人已围观
简介? 为何物?在前不久石头哥的这篇文章中 —— 你可能也会掉进这个简单的 String 的坑,讲述了因字符编码问题而连续踩坑的经历,文中有一个神奇的字符 “?”。其实,这个 “?” 真是无处不在,比如大
?分钟 为何物?
在前不久石头哥的这篇文章中 —— 你可能也会掉进这个简单的 String 的坑,讲述了因字符编码问题而连续踩坑的认到锟经历,文中有一个神奇的斤拷字符 “?”。
其实,分钟这个 “?认到锟” 真是无处不在,比如大名鼎鼎的斤拷微信:
微信中的?
再比如,封面图中,分钟单价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 给你编码看看。
“锟斤拷”在此
惊不惊喜意不意外……
其实是因为,? 用 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)。
锟斤拷(可向右滑动)
现在,你知道了吗?
留个作业题:开篇的五言绝句,你知道另外的梗是来自哪里吗?
很赞哦!(9891)
相关文章
- 为了避免将来给我们的个人站长带来的麻烦,在选择域名后缀时,我们的站长最好省略不稳定的后缀域名,比如n,因为我们不知道策略什么时候会改变,更不用说我们将来是否还能控制这个域名了。因此,如果站长不是企业,或者有选择的话,如果不能选择域名的cn类,最好不要选择它。
- 程序员有话说:开发人员提升自己的四种方式
- webpack——提高工程化(原理篇)
- 企业购买或是使用net域名的原因
- 5、使用企业名称的英文名称作为域名也是国内许多企业选择域名的一种方式,特别适合一些与计算机、网络和通信相关的行业。
- Redis 为何使用近似 LRU 算法淘汰数据,而不是真实 LRU?
- JDK 16 即将发布,新特性速览!
- 「GNN,简直太烂了」,一位Reddit网友的深度分析火了
- 如果你的潜在终端必须是这个米(域名),那么潜在终端并不多,也没有硬通货,那么你的域名应该在终端有兴趣购买时出售。否则,你可能得自己留着吃。
- 域名转让安全吗?域名转让有哪些方式?