Python 3.10如何将含八进制UTF-8字节的字符串以可读格式写入文件
Python处理八进制转义UTF-8字符串写入文件方案
问题核心
你定义的字符串s = "n\303\244chsten"中,\303、\244是八进制格式表示的UTF-8原始字节值:\303对应十进制字节值195(0xC3),\244对应十进制字节值164(0xA4),二者正是UTF-8编码下德文字符ä的两个组成字节。
Python解析这类转义序列时,会默认把每个转义值解析为单个独立的Latin-1范围字符,不会自动按UTF-8规则合并为多字节字符,因此直接写入文件会得到乱码,无法输出预期的nächsten。
实现步骤
- 用
latin-1编码将现有字符串转为原始字节对象:latin-1为单字节编码,码点与0-255的字节值一一对应,转码过程不会丢失或篡改原始字节值 - 将得到的字节对象用
utf-8解码,得到正确的可读Unicode字符串 - 按常规UTF-8编码格式打开文件写入内容即可
代码示例
# 待处理的包含八进制转义字节的字符串 s = "n\303\244chsten" # 转码得到正确的可读字符串 correct_content = s.encode("latin-1").decode("utf-8") # 验证:控制台将输出正确内容 nächsten print(correct_content) # 写入文件,将myfile替换为实际文件路径 myfile = "output.txt" with open(myfile, "w", encoding="utf-8") as fp: fp.write(correct_content)
特殊场景适配
如果你拿到的字符串是未解析转义的原始文本(即肉眼可直接看到\303这类字符序列,而非转义后的不可读字符,比如用raw字符串定义的s = r"n\303\244chsten"),需要先解析转义序列再执行上述转码逻辑:
s = r"n\303\244chsten" # 先解析转义序列,再转码为正确内容 correct_content = s.encode("latin-1").decode("unicode_escape").encode("latin-1").decode("utf-8")
内容的提问来源于stack exchange,提问作者Prasanthi Jayam
相关产品推荐
相关产品推荐

