python教程3.3:字符和编码

1、二进制

计算机只能存储和识别二进制,但是人类常用的字母、数字、汉字怎么用计算机存储和识别呢?

人类强行约定一个对应表,把数字、字母和数字进行对应上,这样就可以用二进制表示字母和数字了。

2、ASCII编码

ASCII是美国于1967年创建,只有127个字母和数字(后面扩展128个,一共255个),用8位二进制来表示。

 ⼀个空格对应的数字是0,     翻译成⼆进制就是00000000

⼀个对勾√对应的数字是251 ,翻译成⼆进制就是11111011

3、计算机容量单位

二进制的每⼀位0或者1所占的空间单位为bit(⽐特),这是计算机中最⼩的表示单位。

每8个bit组成⼀个字节,这是计算机中最⼩的存储单位。

 4、GB2312和GBK

中国自己1980年设计的GB2312编码表,一共存6763个汉字,用2个字节表示一个汉字。

但是如果中英文混合的情况,中文用2个字节GB2312,英文用ASCII编码。

中英文区别规则:

如 果2个字节连在⼀起,且每个字节的第1位(也就是相当于128的那个2进制位)如果是1,就代表这是个中 ⽂,这个⾸位是128的字节被称为⾼字节。 也就是2个⾼字节连在⼀起,必然就是⼀个中⽂。 你怎么如 此笃定?因为0-127已经表示了英⽂的绝⼤部分字符,128-255是ASCII的扩展表,表示的都是极特殊的 字符,⼀般没什么⽤。所以中国⼈就直接拿来⽤了。

1995年扩展升级了GB2312,增加了很多生僻字、字符、藏语、维吾尔语等,叫GBK,现在windows的中文版本编码默认就是GBK。

5、编码战国时代--出现Unicode

各个国家都搞出自己的编码,不同国家软件流通就遇到问题。Unicode应运⽽⽣。Unicode把所有语⾔都统⼀到⼀套编码⾥,这样就不会再有乱码问题了。

Unicode 2-4字节 已经收录136690个字符,并还在⼀直不断扩张中…

Unicode标准也在不断发展,但最常⽤的是⽤两个字节表示⼀个字符(如果要⽤到⾮常偏僻的字符,就 需要4个字节)

Unicode特点:

1. ⽀持全球所有语⾔

2. 可以跟各种语⾔的编码⾃由转换,也就是说,即使你gbk编码的⽂字 ,想转成unicode很容易。

Unicode跟所有语言都有对应关系,可以很容易进行互相转换。

6、UTF-8的出现

如果你写的⽂本基本上全 部是英⽂的话,⽤Unicode编码⽐ASCII编码需要多⼀倍的存储空间,由于计算机的内存⽐较⼤,并且 字符串在内容中表示时也不会特别⼤,所以内容可以使⽤unicode来处理,但是存储和⽹络传输时⼀般 数据都会⾮常多,那么增加1倍将是⽆法容忍的!!!

为了解决存储和⽹络传输的问题,出现了Unicode Transformation Format,学术名UTF,即:对 unicode字符进⾏转换,以便于在存储和⽹络传输时可以节省空间!

UTF-8: 使⽤1、2、3、4个字节表示所有字符;优先使⽤1个字节、⽆法满⾜则使增加⼀个字节, 最多4个字节。英⽂占1个字节、欧洲语系占2个、东亚占3个,其它及特殊字符占4个

UTF-16: 使⽤2、4个字节表示所有字符;优先使⽤2个字节,否则使⽤4个字节表示。

UTF-32: 使⽤4个字节表示所有字符;

UTF 是为unicode编码 设计 的⼀种 在存储 和传输时节省空间的编码⽅案。

7、编码汇总一览表

 8、Py2 Vs Py3编码

python⽣下来的时候 还没有unicode&utf-8, 所以⻳叔选⽤的默认编码只能是ASCII, ⼀直到py2.7,⽤的 还是ASCII, 导致Py默认只⽀持英⽂,想⽀持其它语⾔,必须单独配置。

到了Py3推出后,终于把默认编码改成了unicode, 同时⽂件存储编码变成了utf-8,意味着,不⽤任何声 明,你就可以写各种语⾔⽂字在你的Python程序⾥。 从此,程序们⼿牵⼿过上了快乐的⽣活。

 9、16进制

 16进制在计算`机领域应⽤普遍,常⻅的有html\css的颜⾊表、mac地址、字符编码等都⽤16进制来表 示。 这是因为将4个位元(Bit)化成单独的16进制数字很容易1字节可以表示成2个连续的16进制数字

可是,这种混合表示法容易令⼈混淆,因此需要⼀些字⾸、字尾或下标来显示,在C语⾔、C++、 Shell、Python、Java语⾔及其他相近的语⾔使⽤字⾸“0x”来标示16进制,例如“0x5A3”代表1443。

路⻜的gbk编码的bytes数据是

 

10、不同字符的转换

GBK编码的字符如何转成utf-8存储

任意编码转换成unicode的过程,都叫解码

把unicode转换成任意编码的过程 ,都叫编码

注意:

 windows中文版,默认用GBK编码

mac/linux中文版,默认用UTF-8编码,因此如果windows文件发到mac和linux会有乱码问题。

posted @ 2024-05-04 11:59  JackGIS  阅读(4)  评论(0编辑  收藏  举报