您的位置:首页 > 编程语言 > Python开发

Python自学笔记 - 3.字符编码

2017-09-02 11:10 176 查看
“可变长编码”
UTF-8
编码可根据内容改变字节数,
ASCII
编码实际上可以被看成是
UTF-8
编码的一部分

Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:

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


如果知道字符的整数编码,还可以用十六进制这么写str:

>>> '\u4e2d\u6587'
'中文'


两种写法完全是等价的。

由于Python的字符串类型是
str
,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把
st
r变为以字节为单位的
bytes


Python对
bytes
类型的数据用带
b
前缀的单引号或双引号表示:

x = b'ABC'


要注意区分
'ABC'
b'ABC'
,前者是
str
,后者虽然内容显示得和前者一样,但
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)


纯英文的
str
可以用
ASCII
编码为
bytes
,内容是一样的,含有中文的
str
可以用
UTF-8
编码为bytes。含有中文的
str
无法用
ASCII
编码,因为中文编码的范围超过了
ASCII
编码的范围,Python会报错。

在bytes中,无法显示为
ASCII
字符的字节,用
\x##
显示。

反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是
bytes
。要把
bytes
变为
str
,就需要用
decode()
方法:

>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'


要计算str包含多少个字符,可以用
len()
函数:

>>> len('ABC')
3
>>> len('中文')
2


len()
函数计算的是
str
的字符数,如果换成
bytes
len()
函数就计算字节数:

>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: