知行编程网知行编程网  2022-11-22 12:30 知行编程网 隐藏边栏  0 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于什么是Python的字符串的相关知识,希望可以帮到处于编程学习途中的小伙伴

什么是 Python 字符串

对于单个字符的编码,Python 提供了 ord() 函数来获取字符的整数表示,以及 chr() 函数将编码转换为对应的字符:

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

如果你知道字符的整数编码,你也可以像这样用十六进制写 str:

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

两种写法完全是等价的。

由于Python的字符串类型是str,所以在内存中用Unicode表示,一个字符对应几个字节。如果你想通过网络传输它,或者将它保存到磁盘,你需要将 str 转换为以字节为单位的字节。

Python 使用以 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编码为字节,内容相同,包含中文的str可以用UTF-8编码为字节。包含中文的str不能用ASCII编码,因为中文编码的范围超出了ASCII编码的范围,Python会报错。

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

相反,如果我们从网络或磁盘读取字节流,则读取的数据是字节。要将字节转换为 str,你需要使用 decode() 方法:

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

如果bytes中包含无法解码的字节,decode()方法会报错:

>>> b'\xe4\xb8\xad\xff'.decode('utf-8')
Traceback (most recent call last):
  ...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte

如果字节中只有少量无效字节,可以通过 errors='ignore' 忽略坏字节:

>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'

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

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

len() 函数计算 str 中的字符数。如果用字节代替,len() 函数计算字节数:

>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6

可以看出,UTF-8编码后1个汉字通常占用3个字节,而1个英文字符只占用1个字节。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享