python笔记3:字符串和编码

为了解决字符编码的困难,Unicode应运而生。它把所有的语言统一到一套编码
里,解决乱码问题,但是Unicode编码通常是两个字节,如果你写的文本基本上
全部是英文的话,用 Unicode 编码比 ASCII编码需要多一倍的存储空间,在存储
和传输上就十分不划算。

这时候又出现了“可变长编码”UTF-8编码,。UTF-8 编码把一个 Unicode 字符
根据不同的数字大小编码成 1-6 个字节。

与字符串有关的几个函数
python的字符串支持多种语言
>>>print('包含中文的str')
包含中文的str

单个字符的编码
ord()函数:获取字符的整数表示
chr()函数:把编码转换为对应的字符

>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'

如果知道字符的整数编码,还可以用十六进制这么写 str:
>>> '\u4e2d\u6587'
'中文'

由于 Python 的字符串类型是 str,在内存中以 Unicode 表示,一个字符
对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把
str 变为以字节为单位的 bytes。
python对bytes类型的数据用b前缀的单引号和双引号表示:
x=b'abc'

bytes每一个字符都只占一个字节。

以 Unicode表示的 str 通过 encode()方法可以编码为指定的 bytes,例如:
 
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):  
    File "<stdin>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

要把 bytes 变为 str,就需要用 decode()方法:
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

len()函数:计算str的字符数,bytes的字节数
>>> len('ABC')
3

>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6(一个中文经过UTF-8编码通常会占用三个字节)

格式化
>>>'hi, %s, you have $%d.' % ('donglei', 100000)
'hi, donglei, you have $100000.'

%d 整数     %f 浮点数     %s 字符串     %x 十六进制整数
不太确定应该用什么就用%s ,它会把任何数据类型转换为字符串:
>>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'
如果出现%,则用%%来表示一个%:
>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'

猜你喜欢

转载自blog.csdn.net/sanhey/article/details/80040530