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

Python读取文本文件无法识别“–”字符报UnicodeDecodeError问题问询

问题1:为什么仅指定encoding=utf-8时才报错

你的认知存在偏差:Python内置open()函数的默认编码不是固定为UTF-8,默认编码取值为运行环境的系统区域偏好编码,可通过locale.getpreferredencoding(False)查看,比如Windows中文环境默认编码通常为cp936,欧美环境常为cp1252。
你遇到的0x96字节正好是cp1252编码下短破折号–的合法编码值,所以当你不指定encoding参数时,系统用默认的cp1252/cp936解码该字节不会报错;而0x96不属于UTF-8编码的合法单字节字符,也不是多字节字符的合法起始字节,所以显式指定encoding=utf-8时会触发解码错误。

问题2:写文件阶段的修复方案

不需要修改读取逻辑,仅在写入文件时做以下任意一种调整即可修复:

  • 方案1:写入时显式指定UTF-8编码
    打开待写入的文件时显式传入encoding='utf-8'参数,保证所有字符都以UTF-8标准编码存储,示例代码:
    # 写入阶段代码
    with open("output.txt", "w", encoding="utf-8") as f:
        f.write(你从API拿到的文本内容)
    
    这种方式写入的文件完全符合UTF-8标准,后续读取时指定encoding=utf-8不会触发编码错误。
  • 方案2:写入时对齐读取端的默认编码
    先在读取程序的运行环境执行以下代码拿到默认编码:
    import locale
    print(locale.getpreferredencoding(False))
    
    写入文件时指定为该编码即可保证编解码完全匹配,哪怕读取端不指定encoding参数也不会出现任何报错。
  • 补充兼容方案:如果存在无法识别的异常字符,可在写入时添加errors='replace'参数,将异常字符替换为�占位符避免写入失败,示例:
    with open("output.txt", "w", encoding="utf-8", errors="replace") as f:
        f.write(文本内容)
    

内容的提问来源于stack exchange,提问作者Aniket Tiratkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:54:05