Python:如何解码从文本文件导入的UTF-8编码字符串?
解决UTF-8转义字符串解码问题
核心问题
你碰到的AttributeError是因为Python 3里字符串(str)本身就是Unicode编码,只有字节串(bytes)才有decode方法。你从文本文件读到的是包含十六进制转义序列的字符串,不是原始字节,得先把这些转义序列转换成字节串,再解码。
可行解决方案
方法1:用codecs模块处理转义
codecs.escape_decode可以直接把带\xXX转义的字符串转换成字节串,再用UTF-8解码:
import codecs # 从文本文件读取的字符串 text_from_file = r"\x6d\xc3\xbc\x6c\x6c\x65\x72\x20\x69\x73\x74\x20\x63\x6f\x6f\x6c\x21" # 转换转义序列为字节串 bytes_data, _ = codecs.escape_decode(text_from_file.encode('utf-8'), 'hex-escape') # UTF-8解码得到最终文本 result = bytes_data.decode('utf-8') print(result) # 输出:müller is cool!
方法2:手动解析转义序列
如果不想依赖库,可以手动拆分转义序列并转换:
text_from_file = r"\x6d\xc3\xbc\x6c\x6c\x65\x72\x20\x69\x73\x74\x20\x63\x6f\x6f\x6c\x21" # 拆分所有\x开头的转义片段 parts = text_from_file.split(r'\x')[1:] # 把每个片段的十六进制字符转成字节 bytes_data = bytes(int(part[:2], 16) for part in parts) # 解码为Unicode文本 result = bytes_data.decode('utf-8') print(result) # 输出:müller is cool!
关键说明
Python 3里的str和bytes是严格区分的:
str→ 用encode()转成bytesbytes→ 用decode()转成str
你直接给str调用decode(),自然会触发AttributeError。
内容的提问来源于stack exchange,提问作者FoxOverflow
相关产品推荐
相关产品推荐

