Python字符串与Unicode编码处理指南

Hazel
Hazel
发布时间:2026-10-10 | 4人浏览过
原创

本文详解Python中str与bytes的区别、Unicode编码原理及UTF-8/BOM处理。涵盖字符串创建、编码转换、文件读写中的编码指定及常见字符串方法,帮助开发者正确处理文本数据。

Python字符串类型基础

在Python中,str代表Unicode字符串,而bytes代表二进制字符串。构造str时,使用单引号、双引号或三引号在内部存储上没有区别。对于bytes,其每个字节是0到255之间的数字,打印时ASCII部分会显示为字符。虽然bytes支持除格式化外的多数str方法,但它也支持re模块进行正则匹配。

此外,bytearray是一种可原地修改的二进制字符串。可以通过bytearray(string, encoding='utf-8')从字符串创建,或通过bytearray(bytes)从字节串创建。

Unicode编码与UTF-8规则

Python默认使用UTF-8编码。Unicode字符根据码位范围占用不同字节数:
- 0x0000~0x007F:1字节
- 0x0080~0x07FF:2字节
- 0x0800~FFFF:3字节
- 0x10000~1FFFFFF:4字节
- 0x2000000~0x3FFFFFF:5字节
- 0x4000000~0x7FFFFFFF:6字节

在文件操作中,编码方式会影响是否写入BOM(Byte Order Marker):
- utf-8:不写BOM
- utf-8-sig:强制写入BOM
- utf-16-be:不写BOM
- utf-16:写入BOM

当指定正确的编码时,Python会忽略BOM;若未指定正确编码,BOM可能导致乱码。例如,使用utf-8-sig写入文件后,以二进制读取会看到b'\xef\xbb\xbfaaa',而以默认编码读取则会显示乱码'锘縟dd',指定utf-8-sig编码读取则正常。

>>> open('h.txt','w',encoding='utf-8-sig').write('aaa')
3
>>> open('h.txt','rb').read()
b'\xef\xbb\xbfaaa'
>>> open('h.txt','w',encoding='utf-16').write('bbb')
3
>>> open('h.txt','rb').read()
b'\xff\xfeb\x00b\x00b\x00'
>>> open('hh.txt','w',encoding='utf-16-be').write('ccc')
3
>>> open('hh.txt','rb').read()
b'\x00c\x00c\x00c'
>>> open('h.txt','w',encoding='utf-8').write('ddd')
3
>>> open('h.txt','rb').read()
b'ddd'
>>> open('h.txt','r').read()
'锘縟dd'
>>> open('h.txt','r',encoding='utf-8-sig').read()
'ddd'

编码转换与字符处理

可以使用chr()和ord()进行编码与解码。例如,ord('中')返回20013,chr(20013)返回'中'。字符串中还可以使用转义序列:
- '\xhh':2位十六进制表示字符
- '\uhhhh':4位十六进制表示字符
- '\Uhhhhhhhh':8位十六进制表示字符

编码与转换操作如下:
- str.encode(encoding='utf-8'):进行编码
- bytes(s, encoding='utf-8'):将字符串转换为字节
- bytes.decode(encoding='utf-8'):将字节解码为字符串
- str(B, encoding='utf-8'):将字节转换为字符串

系统环境与字符串方法

可以通过sys.getdefaultencoding()查看默认编码(通常为'utf-8'),sys.platform查看平台(如'win32'),sys.byteorder查看字节序(如'little')。在文件头部可以使用# -*- coding: latin-1 -*-声明编码。

字符串对象提供多种判断方法:
- s.isalnum():是否为字母数字
- s.isalpha():是否全为字母
- s.isdecimal():是否为十进制数字
- s.isdigit():是否为数字
- s.isnumeric():是否为数值
- s.isprintable():是否可打印
- s.isspace():是否为空白字符
- s.isidentifier():是否可用作变量名
- s.islower():是否全小写
- s.isupper():是否全大写
- s.istitle():是否为标题格式

sys.platform  #'win32'
sys.getdefaultencoding() # 'utf-8'
sys.byteorder  #'little'
s.isalnum()  #s表示字符串
s.isalpha()
s.isdecimal
s.isdigit()
s.isnumeric()
s.isprintable()
s.isspace()
s.isidentifier() #如果字符串可以用作变量名,那么返回True
s.islower()
s.isupper()
s.istitle()

以上就是Python字符串操作和编码Unicode的详细内容,更多关于Python字符串处理、Unicode编码及文件读写技巧的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表