今天白月黑羽和你们说说字符编码python
咱们眼睛看到的电脑上显示的字,包括汉字、英文、日文、韩文,这些文字,在计算机内部是怎么存储的?网站
难道是刻上去的? 好比刻在硬盘上一个个这样的字?编码
固然不是,计算机都是用数字存储信息的。code
用 磁场、电信号 等物理介质的 正负 状态 表示 0 和 1,若是一个数字只由0和1 表示,就是一个2进制的数字表示法。orm
用连续的0和1,就能够表明很大的数字。ip
好比unicode
二进制 的 10
就表示十进制 的 2
get
二进制 的 110
就表示十进制 的 6
it
从右向左,每位 上的 1 分别表明 2的0次方(就是1), 2的1次方(就是2),2的2次方(就是4),2的3次方(就是8) 等等, 依次类推。io
根据不一样的使用场合,数字能够表示不一样的意义。
好比,须要存储 颜色
信息的时候, 0 能够用来表明 白色, 1 表明红色, 2 表明 黑色等等。
若是有10000种颜色,能够用 0 到 9999 一共 10000个数字分别表明他们。
一样的, 咱们要存储 文字
信息,也能够用不一样的数字来表明不一样的文字。
计算机是美国人发明的,因此在开始的时候, 他们也没有想到未来要支持全世界的文字。
因此,最先的时候,他们定义了一个规范,定义一些数字 用来表明美国人使用的文字符号。
而美国人的单词都是用字母拼出来的, 因此他们经常使用的基础文字符号比较少。
就是字母,再加上 !@#$%^&*(){[]}+- 等等这些符号,也就100多个。
他们定义的规范就叫 ASCII (American Standard Code for Information Interchange) ,中文大意就是 美国信息交换标准码
你们能够参考 百度上面的ASCII表
这个 ASCII 码里面用128个数字表明了128个字符。
要存储和传输这 128个字符对应的文字信息 也很简单, 二进制有 8 位就足够了。
由于2的8次方等于256,能够存储 从 0 到255 一共 256个数字, 能够表示 最多 256 个文字符号。
二进制有 8 位 的长度 被称为 一个 字节 。
因此一个字节就能够存放 任何一个ASCII 文字符号。
ASCII 这样的 用数字表明文字符号的规范,就被称之为 字符集
后来计算机传遍了全世界,其它国家的文字符号就多了。
咱们中文,就有这么多的文字符号。小学的时候,咱们有个3000经常使用字表(我骄傲一下,小学1年级我就认识了近2000多个字), 光经常使用字就有3千个。
固然还有 韩文、日文、繁体中文、阿拉伯文等等。
显然ASCII是不够的,咱们须要其它的数字来表明这些文字符号。
开始各个国家和地区 本身定义了本身的 字符集。
好比咱们中国就定义另一套规范, 规定了 用什么样的数字表明什么样的文字符号。
这套规范也在不断的升级,包括 GB23十二、GBK、GB18030
各个国家定义了各国的文字的字符集,这就带来了一个问题。
如今全球交流很密切,有时一篇文章会使用多国文字,好比 同时使用 日文和中文。 而没有各国的字符集是不包含别国文字的, 这时就无法在一篇文章中存储多国文字了。
为了解决这个问题。 国际标准化组织定义了一个字符集,想包括世界上全部的文字符号。
这就是大名鼎鼎的 unicode 字符集。
这个字符集里面包括了现今世界上的经常使用文字符号 和 其对应的数字表示。
这样就解决了在一篇文章中包含多国文字的问题了。
unicode 出现了,很好,可是还有一个问题。 字符怎么存储和传输。
最初只有ASCII码的时候,一个字节(最多能够表示256个字符)就能够存储传输任何文字。
因此软件硬件对 每一个字符都是用字节(8位二进制数字)来进行存储、传输的。 没有什么问题。
可是unicode里面有10多万的文字符号,数字范围 远远 超过 一个字节所能表明的数字。
因此一个字节不够。
那么怎么用多个字节来 表示这些数字呢?
这就有须要另外的规范。这些 如何用字节表示 字符对应的数字 就是 字符编码 规范
unicode字符 的编码,最经常使用的规范是 UTF8 和 UTF16 。
好比 UTF8 表示 中文字符 你 ,就是用 3个字节表示的,对应的16进制表示是 E4 、BD、 A0
固然咱们中文字符集gb系列使用另外的编码规范。
之后,咱们会写一篇文章,以UTF8为例,讲解它是如何用多个字节存储 数字的。
这里咱们只要知道 不一样的 编码规范 对数字有不一样的 用字节表示的方法就好了。
有了编码规范,字符集 中的数字就能够进行存储和传输了
了解更多内容,请百度白月黑羽,或移步白月黑羽的官方网站