字符串处理
字符串和编码
计算机系统通用的字符编码工作方式:在计算机内存中,统一使用 Unicode 编码,当需要保存到硬盘或者需要传输的时候,就转换为 UTF-8 编码。
UTF-8 编码: 它把 Unicode 编码转化为“可变长编码”。常用的英文字母被编码成 1 个字节,汉字通常是 3 个字节,只有很生僻的字符才会被编码成 4-6个字节。如果你要传输的文本包含大量英文字符,用 UTF-8 编码就能节省空间。
在Python 3 版本中,字符串是以 Unicode 编码的,也就是说,Python 的字符串支持多语言。
由于 Python 源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为 UTF-8 编码。当Python 解释器读取源代码时,为了让它按 UTF-8 编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行告诉Linux系统应该运行哪个解释器。
第二行告诉 Python 解释器,按照 UTF-8 编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
以 Unicode 表示的 str 通过
encode()
方法可以编码为指定的 bytes,例如:>>> 'ABC'.encode('ascii') b'ABC' >>> 'ABC'.encode('utf-8') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87'
在 bytes 中,无法显示为 ASCII 字符的字节,用
\x##
显示。
纯英文的 str 可以用 ASCII或UTF-8 编码为 bytes,内容是一样的,含有中文的 str可以用 UTF-8 编码为 bytes。
含有中文的 str 无法用 ASCII 编码,因为中文编码的范围超过了ASCII编码的范围, Python 会报错。如果我们从网络或磁盘上读取了字节流,那么读到的数据就是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
在操作字符串时,我们经常遇到 str 和 bytes 的互相转换。为了避免乱码问题,应当始终坚持使用 UTF-8 编码对 str 和 bytes 进行转换。
格式化
旧式风格
旧的格式化方式和 C 语言是一致的,用%实现:
>>> 'Hello %s' % 'world'
'Hello world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
如果只有一个%参数,括号可以省略。
使用%s时,它会把任何数据类型转换为字符串。
新式风格
新的格式化方式是使用format()
方法实现:
>>> '{} is {}'.format('erick', 100)
'erick is 100'
官方推荐使用新式风格进行格式化。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论