中文编码—转载自柴知道
时间:2023-06-21 22:03:02 | 来源:网站运营
时间:2023-06-21 22:03:02 来源:网站运营
中文编码—转载自柴知道:
声明:本文转载自柴知道,为个人学习资料记录,原视频见视频,原文见文本。
内容笔记:
使用一个字节前128字符空间:ascii
一个字节后全128空间:eascii
两个字节:GB2312—80
微软扩展中文集:GBK2312
万国码:unicode(utf8,utf16,utf32)
文字版脚本2022年,一则娱乐新闻冲上了热搜,但网友们很快发现,这里的“⼊”并不是我们常用的中文“入”,而是热心人为了降热度用的替换符号,给我们玩了一个花招。
这只是有关电脑文字的无数小故事之一。在过去的日子里,你见过跟别的字格格不入的孤寡文字,打开过全是“锟 (kūn) 斤拷”的txt小说,全是框框的游戏对话,点击过长得跟真网址一模一样的钓鱼网站,甚至有一个连派出所也登记不了的名字......
所有这一切,都跟电脑显示文字的原理有关。在这期视频里,我们会带你入门中文显示,了解乱码、孤寡文字和钓鱼网站背后的有趣故事。
话不多说,开始吧!
电脑显示文字,涉及到三个重要的概念:字符、字符集,和字符编码。
一个汉字、一个拉丁字母、一个数字,世界上各种语言里的“字”和“标点符号”,都属于
“字符”。一堆字符组成的集合,叫做
“字符集”。
人类世界有海量的字符,它们原本都写在纸上,甚至刻在石头上。而所有这些字符,计算机......一个都不认识。
你肯定知道,计算机只认二进制,只能以比特的形式记录“0”和“1”。为了让计算机“识字”,我们就需要把这些字符用 0 和 1 表示出来。把字符转换成 0 和 1 的规则,叫做
“字符编码”。
那么,怎么给字符编码,把它们变成0和1呢?
很简单:我们可以选定一个字符集,让字符们“排排坐”,再把“座位序号”转换成二进制——这个“座位序号”叫做
“码位”,座位的总数叫做
“码空间”。码空间越大,字符集就越大。
比如世界上如果只有“柴”“知”“道”这三个字的话,那我们就可以把“柴”编码为00,“知”编码为01,“道”编码为10。这样计算机一看到这些编码,就知道要显示哪个字了。
在现实世界中,计算机存储数据的基本单位是“字节”,也就是Byte。一个字节,由 8 个二进制位组成,也就是 8 个比特(bit)。每个比特有 0 和 1 两种状态,8个比特一共有 2^8 个,也就是 256 种不同的状态。
所以如果只用一个字节长度来编码字符,那么这个字符集就能容纳 256 个字符。
听起来很少对不对?但对于英文来说已经够了,反正他们一共只有 26 个英文字母嘛~
所以在上世纪 60 年代,美国人先搞出了“美国信息交换标准代码”,简称 ASCII 。ASCII 总共收录了 128 个字符,包括大小写拉丁字母、数字、常用标点,以及像 ESC、换行这种看不见的控制字符。
到此为止,事情都很简单:无非就是给这 128 个字符按照顺序排号,再把序号转换为二进制数字。需要显示的时候,从计算机存储的 ASCII 字符集中按编号调用字符,就能在屏幕上显示出来。
一个字符集,对应一个编码规则,不会出错,一切都很清晰,简单,完美。
但所有的完美都是易碎的。这世界上远远不止英文一种语言,当各国都要跑步进入信息化社会的时候,文字显示的“乱纪元”就开启了。
刚才说过,用一个字节编码字符,最多能容纳256个码位。英语一共才那么点字符,256 个码位用完都还剩一半。所以西欧一些国家,就搞了“扩展美国信息交换标准代码”,EASCII,也就是用剩下的这 128 个空位,来表示其他的字符:比如上方有注音符号的法语字母,西班牙语里的特殊标点,数学上常用的 α、β 等希腊字母,以及一大堆特殊符号等等。
这时候,问题就已经开始冒头了:
各国搞的 EASCII 字符集和编码,后面 128 个字符都不太一样,一共搞出了 200 多种 EASCII ,互不兼容。就算是同样一串二进制数,在不同的 EASCII 中对应的字符也不同。所以同一份文本哪怕放到不同语言的计算机中打开,都可能会出现“乱码”。
这还算好的。因为当信息高速公路修到中、日、韩等国家和地区时,就要面临一个更复杂的问题:汉字。
汉字的历史源远流长,总数量那可太多了。我国 1980 年公布的《GB 2312-80 信息交换用汉字编码字符集 基本集》,就包含了 6763 个常用简体汉字,以及一些标点、符号、数字、拉丁字母等。
那很显然, 1 个字节长度最多只能编码 256 个字符,对汉字来说根本不够用。所以 GB 2312 用两个字节长度,来编码一个字符,这样理论上就可以容纳 2^16 个,也就是 65536 个字符。现在输入法里的全角标点符号就是用两个字节编码的,而半角标点符号,就是用一个字节编码的。
不过,GB 2312-80 字符集里这六千多个汉字,只是最最常用的汉字,其实根本不够用,比如像“喆”,“頫(fǔ)”,“旻(mín)”,“祎(yī)”这些人名中的常见字甚至都不包括在内。
那字符集里没有的那个字怎么办呢?那就打不出来。
所以在过去,如果你叫“张