计算机编码的浅薄的理解
常常遇到有关编码和字符集的一些问题,了解一下历史更有助于理解和解决问题
从摩尔斯电报码到 ASCII 到 Unicode 到 UTF-8
基本上知道这几个也就差不多了
我的理解是:
- 编码其实就是一种映射,设计编码的本意是为了用机器来传递人类的信息,
- 他的原则就是以最小的代价尽可能最多后者最准确的传递信息
- 编码跟加密解密的道理类似
- 计算机网络传输跟电报传输技术是有继承和相似之处的
最早用电报用莫尔斯码
其实就是时通时短的电信号
****-/*----/----*/****-/****-/*----/---**/***-
转变成对应的字母,数字或者一些简单的标点符号
这些对应关系就是编码,一旦定下来以后就让人去学习,然后去做翻译/解译工作。
机器其实只管传输,这样接收者就能很好的理解并翻译回人类的语言。
这跟加密解密其实也是一个道理。
摩尔斯电码(英语:MorseCode)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国人萨缪尔·摩尔斯在1836年发明。
1873年,法国驻华人员威基杰参照《康熙字典》的部首排列方法,挑选了常用汉字6800多个,编成了第一部汉字电码本《电报新书》。电报中的
摘自齐伟《跟老齐学Python:从入门到精通》
中文电码出现了,其实也就在编码基础上再编码将汉字编成数字,再将数字编程莫尔斯码来传输,因为原来的编码只能对应拉丁字母和阿拉伯数字,不光中国的汉字很多其他国家的文字都要再编码。
计算机网络的出现,和Web分享信息的流行,导致了 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)的诞生。
计算机最开始的发展当然是以美国为首的,所以将拉丁字母和0和1的二进制字节进行对应,才能方便信息在计算机网络传输。
但光能识别英语不行,这时候 Unicode 就出现了,万国码,国际码,大概就是十多万个全球各种文字/字母都进行了编排对应。这也就是字符集了。
UTF-8顾名思义就是一种8位的 万国码转换格式,
用通信理论的思路可以理解为:
- unicode是信源编码,对字符集数字化;
- UTF-8是信道编码,为更好的存储和传输,可以节省流量和硬盘
因为在ASCII的时候一个字母只要1个字节都可以了。
到了Unicode 因为需要编码的字符太多了,通常用到了2个字节,就是不管是高频使用的还是生僻的字符都要2个字节来表示。
而UTF-8进行格式转换以后可以用1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
这个转换其实就是:
- 由于计算机是按顺序读取的,而不同字符对应的字节不等长。
- 所以给编码是不同的字符加了标记告诉计算机这里要读取几个字节。
- 这样就节省了空间又能正确的读取都字符信息了。
如有逻辑不正确的地方,请批评指正,谢谢!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。