当前位置: 首页 > 科技观察

1分钟带你认识“?”到“坤进号”

时间:2023-03-12 03:26:12 科技观察

?它是什么?石头哥前不久的这篇文章——你可能也会掉进这个简单的String的坑里,讲述了因为字符编码问题不断踩坑的经历。有一个神奇的字符“?”在文章中。事实上,这个“?”真的是无处不在,比如大名鼎鼎的微信:微信里?比如封面图,22元的单价是“半锸占锡卷”,然后随便百度一个:无处不在?要弄清楚这个问题,还得从编码说起。因为在计算机眼里,都是二进制,用哪个二进制数代表哪个符号,这就是编码。不要觉得编码太复杂,其实就是一个很简单的映射。比如大家熟知的ASCII码指定二进制01000001,十进制是65,表示大写字母A。ASCII码?也是一个编码字符,就像上面的A一样,是UNICODE编码中的一个特殊字符,即0xFFFD(65533),语义是一个占位符,用来表示这个编码系统中未知的东西,你不知道的东西不知道。比如上一篇实验的截图中,红色圈出的对应字符不知道UTF-8编码,所以根据UNICODE的定义,我只好用一个统一的占位符——0xFFFD(65533)来表示.为什么会有“昆进本”?我们继续上一篇文章的例子,如下图,依然从“程序员石头”截取二进制码对应的部分:如上图,第18行的字节数组newbyte[]{-25,-119,-25,-116},UTF-8刚好看不懂,只能换成占位符。??这种情况在代码转换过程中确实比较常见。如果双方没有沟通清楚,确实很容易互相不认识。在中文系统中,常用的字符编码是GBK。这个时候因为大家事先没有讨论清楚,我就默认给大家按照GBK编码。“kunjincopy”是不是奇葩……其实是因为,用UTF-8编码后,变成了0xEFBFBD(也就是上面的字节数组[-17,-65,-67]),两个的组合是0xEFBFBDEFBFBD,也就是上面的字节数组[-17,-65,-67,-17,-65,-67]。GBK编码仍然采用双字节编码方案,所以将上述6个字节0xEFBFBDEFBFBD拆分为三个2字节的字符,即0xEFBF、0xBDEF、0xBFBD。),copy(0xBFBD).顺重色(向右滑动)现在,你知道了吗?留个作业题:开头的五言绝句,你知道其他梗从何而来吗?