提示:由于微信公众平台限制,本页面无法展示公众号内部图片,请移步“飘在天上的云”公众号查看或直接打开公众号链接:
飘在天上的云:云朵科学院 · 乱码的前世今生
你也可以在此处预览公众号内容。
什么?你说这一期的标题很奇怪?啊?难道它乱码了?!
先看一个乱码:
UTF-8:
��ӭ�������ƶ��ѧԺ֮�����ǰ������??
�ðɣ�������Ц������������??
锟斤拷迎锟斤拷锟斤拷锟斤拷锟狡讹拷锟窖г褐拷锟斤拷锟斤拷前锟斤拷锟斤拷锟斤拷??
锟矫吧o拷锟斤拷锟斤拷锟斤拷笑锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷??
你有没有想过,乱码是怎么来的呢?
云朵科学院 · 乱码的前世今生
在搞清楚乱码之前,我们要先了解编码。毕竟计算机只认得0和1,我们想把我们的“字”表示到计算机中,就得把字符转换成0和1。这个时候,编码就是来帮助我们转换的。假设全世界只有“云朵科学院”五个字,那么这五个字就可以表示为:
注:本表格并非准确例子,真实字符编码复杂得多
云:(00,
00) [0000]
朵:(01, 00) [0100]
科:(10, 00) [1000]
学:(00, 01) [0001]
院:(01, 01) [0101]
通过这种方式,我们就成功把“云朵科学院”这五个字转换成了计算机能够理解的语言。
但是,这世界上远远不止只有“云朵科学院”五个字,在世界上的语言数不胜数,那么就让我们先从发明计算机的美国开始吧!
第一章:英文(拉丁字符)世界(ASCII)
在最开始,美国先搞了字符编码,也就是美国信息交换标准代码(American Standard Code for Information
Interchange),共包括128个字符,有英文字母、符号、数字、换行符(是的,这也是一个字符)、结束符、一些符号(比如♦♠)等。由于英文字母大小写共52个,数字0~9十个,所以ASCII的码位并不多,只有128个。
之后呢,欧美地区的国家又搞出了扩展美国信息交换标准代码(EASCII),将原来的七位(二进制1000 0000,十进制128,见下图2)扩展为八位(二进制0001 0000
0000,十进制256,见下图3),也就是增添了128个码位,共256个码位。在这些码位中添加了一些其他国家的字符,比如法国的注音文字,希腊字母(α,β,γ等),特殊字符(‰,™,©等),和一些其他的字符(如¥,§)等等等等(见下图4),这个时候乱码就已经初见端倪了,因为各国的EASCII不一样啊!
在IBM
PC以视频图形阵列显示卡显现的代码页437(即EASCII),来源于维基百科
这就导致了最初的乱码,比如我在一个文档里输入±(ISO/IEC
8859-1,即西欧语言)符号,有可能到另外一台电脑上就变成了ฑ(ISO/IEC
8859-11,即泰语)符号,这就是最早的乱码。
当信息高速公路修到东亚地区,就遇到了一个严重的问题:中文。作为一个拥有5000年历史的象形文字,光是中文的常用字就有3000余个(在这3000多个字中部分人名用字、古籍中的生僻字如「䶮」「龘」都没有),况且大陆简体、新加坡简体等等文字还有细微的差别。
之后,在中国大陆地区,中国国家标准总局在1980年发布了GB 2312字符集,GB
2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、注音符号、俄语西里尔字母在内的682个字符。
但是由于GB
2312只是“基本字符集”,字符不全,因此中华人民共和国全国信息技术标准化技术委员会于1995年12月1日制订了汉字内码扩展规范(GBK),即国家标准扩展(Guojia Biaozhun Kuozhan),共21886个汉字,但是这只是一个技术规范指导性文件,并不属于国家标准。
再之后由中华人民共和国信息产业部提出,GB 18030出现,共收录汉字87887个和汉字部首228个,当然,这些编码与其他的编码仍然是不兼容的,那么怎么办呢?
想要解决不同国家乱码的问题,摆在人类面前的方案有两种(注:前方核能)
当然,这样的代价就有那么亿点点大了,于是只能选择第二种方案。
第二种:制作一个超超超超超超级大的字符集,容纳全世界所有的字符。这就是Unicode(万国码,也称统一码)的设想。Unicode的野心很大,一上来就收录了25种语言,Unicode根据书写系统将这些文字分类,比如英语、德语、法语等都属于拉丁字符,就属于拉丁书写系统。虽然拉丁字符、西里尔字符、希腊字母的“o”都长得很像,但是毕竟属于不同的书写系统,所以他们也有自己的码位。
汉字、日文、韩文被统一归类为中日韩统一表意文字,范围(码位)从4E00~9FFF之间,因为数量实在庞大,为了节省码位,所以Unicode将一些写法相近的文字放入同一码位,如下图5所示。
说实话4E04、4E05和4E06你看得懂吗?我觉得4E04更像垂直符号⊥
并且,作为一个超超超超超极大的字符集,Unicode还不止有一种编码,UTF-8,UTF-16,UTF-32等等编码都有,不同于普通的编码,比如GBK,就只有GBK编码一种编码。
要知道,现在GBK等等编码并没有完全消失,所以说如果你将一个用GBK保存的文件用UTF-8打开,文章开头的UTF-8内容就有可能是你的乱码内容,如果你把这段乱码再次保存发给别人,那么恭喜你,所有的问号字符被转化为16进制的0xEF BF BD,你把这段保存后的文字再次发给你的好基友,他用GBK再次打开,那么两个问号就会变成16进制为0xEFBF BDEF BFBD,在GBK中正好对应锟斤拷,那么,恭喜你的好基友喜提上古神器:锟斤拷!
当然,“锟斤拷”只是乱码中的一个典型代表,其他的还有类似烫烫烫、屯屯屯、、%E4%BD%A0%E5%A5%BD等,当然,浣犵幇鍦ㄧ湅鍒扮殑杩欏彞璇濓紝灏辨槸涓€鍙ヤ贡鐮�(你现在看到的这句话,就是一句乱码)。
写到这里,关于乱码的故事终于可以告一段落了,现在乱码的现象也逐渐减少了,随着Unicode的普及,越来越多的设备、软件采用了它,但是在这个世界上,还存在着许多老系统,老软件,你甚至不知道他们用的是什么编码,每一个乱码,就是此处与彼处,过去与现在的一次碰撞,是人类文明的进程,是计算机技术的发展史,是世间文字奏出的乐章。当然,如果你特别烦乱码,觉得现在的解决方案都不够好,那还有一个办法,我刚不是说了吗?
乱码,终究是不可避免地现象,但是希望在我们今后的生活中,他能成为我们永久的历史记忆!
这期云朵科学院制作非常辛苦,我们诚恳希望你能给我们点个关注,点个赞,点个在看,你的支持就是我们最大的动力!
声明:本文章可能有部分内容存在错误或者不足,如果你发现文章的错误,我们欢迎你能在留言区告诉我们错误内容。本文章内容仅供参考,不得作为任何科学依据。
在最后,我们非常希望你能参加我们的调查:
🤓👇以下网址在浏览器(或扫码)打开
https://forms.office.com/r/ce7j2upkxx
2025/4/5
====☁云朵科学院☁====
点点关注吧~