几种字符编码

2018-01-25  本文已影响0人  SimonJoe246

本文参考廖雪峰老师的Pyhton教程

几种编码

ASCII

计算机只能处理0和1,所有的文本都要转换成数字才能处理。早期计算机在设计时采用8个比特(bit)为一个字节,计算机是由美国人发明的,他们将26个字母、数字和一些符号编码到计算机中。一个字节(8位)表示,最多能表示128种字符,称为ASCII码。

Unicode

非英语国家只能规定适用自己语言的编码,如中国制定了GB2312编码,日本制定了Shift_JIS编码,韩国制定了Euc-kr编码。如此以来,各国执行不同的标准,如果文本同时出现多种语言,则无法正常显示,会有乱码。

所以Unicode应运而生,它把所有语言都统一到一套编码里,这样就不会出现显示乱码问题了。

上面说到,ASCII采用1个字节编码,Unicode通常采用2个字节编码,所以最大能表示65536种字符。

字母A用ASCII码表示是十进制的65,二进制中是`0100 0001

字符0用ASCII码表示是十进制的48,二进制中是0011 0000。注意,字符0和整数0是不同的。字符用ASCII码表示只占一个字节,十进制为48,整数0在c语言中占2个字节 ,十进制为0

汉字已经超出了ASCII码的范围,在Unicode中,十进制表示为20013,二进制为01001110 00101101

那么字符A在Unicode中怎么表示呢?

直接在其ASCII码的二进制表示前加0即可,即00000000 01000001

UTF-8

采用Unicode统一编码的方式,解决了多语言冲突显示乱码的问题,但是

Unicode有一个问题,如果我写的文本基本为英文的话,采用unicode编码的话,该文件所占用的内存空间比采用ASCII编码多一倍,在存储和传输上就极不划算。

由此,人们想出了把Unicode编码转换成“可变长编码”的UTF-8编码,UTF-8编码把Unicode中的字符按不同的数字大小编码成1-6个字节,英文通常为1个字节,汉字通常为3个字节,只有极其生僻的字符才可能用到4-6个字节。如果要传输的文本以英文为主,则采用UTF-8编码能节省大量的存储空间。

字符 ASCII Unicode UTF-8
A 0110 0001 00000000 01100001 0110 0001
x 01001110 00101101 11100100 10111000 10101101

从上面表格还可以发现,UTF-8已经将ASCII码包含进来了,所以一些历史遗留的只支持ASCII码的软件可以在UTF-8下继续使用。

ps: 以前也看过这几个编码,勉强知道个大概意思,但很难理解,直到看到廖老师的教程,感觉突然间豁然开朗。

上一篇下一篇

猜你喜欢

热点阅读