python学习笔记(2) - 字符串和编码

Welcome to MyBlog! This article was writed to take note my study of Python on liaoxuefeng.


字符串和编码

1.比特(bit)和字节(byte)

一个字节就是指0或者1,计算机底层只能识别0和1.

而最早的计算机在设计时,采用8个bit作为一个字节byte

2.ASCII编码

由于计算机是由美国佬发明,所以,最开始只有127个字符被编码进计算机,也就是大小写英文字母、数字、和一些符号,一个字节就够用了。这个编码表就是ASCII编码。

3.GB2312编码

但是如果换到中国,一个字节显然不够用,至少要2个字节,而且不能够和ASCII编码冲突,所以制定了GB2312编码。用来编码中文。

4.Unicode编码

但是,世界上有上百种语言,比如日本的Shift_JIS编码,韩国的Euc-kr编码。各国有各国的标准,最多只能避免与最早出现的ASCII编码产生冲突。但是其他语言编码之间必定会有冲突。

因此,Unicode应运而生了。它把所有语言统一到了一套编码里。防止乱码。

UnicodeASCII之间的区别:ASCII编码是1个字节,Unicode编码是2个字节。

5.utf-8编码

但是,新的问题又出现了,如果统一Unicode编码,用Unicode编码要比ASCII编码多用一倍的空间,只用英文的人肯定是不同意的啊

所以,utf-8编码出世了。utf-8Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,很生僻少用的字符用4-6个字节。

如此,utf-8还有个好处,最原始的ASCII编码可以被看成utf-8编码的一部分。

6.python中的编码和解码

1
2
3
4
5
6
7
8
9
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

7.格式化字符串%