You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:36:36