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

Python脚本终端输出与写入文件结果不一致编码问题求解

问题解决方法

核心原因

Python 3 中open()函数默认使用系统当前默认编码(Windows为GBK,macOS/Linux为UTF-8)读写文件,终端输出时会自动适配终端编码,但写入文件/重定向输出时如果编码不匹配,就会出现乱码。同时原代码存在索引越界的逻辑问题,也可能引发异常输出。

修复步骤

  • 读写文件显式指定编码
    首先修改读文件代码,显式声明原文件编码(最常见为UTF-8),如果是脚本内直接写入结果,写文件时也指定相同编码:
    # 读文件指定编码,若为带BOM的UTF-8可替换为utf-8-sig
    with open("output_changed2.txt", encoding="utf-8") as f:
        content = f.readlines()
    # 写文件也指定相同编码
    with open("result.txt", "w", encoding="utf-8") as out_f:
        # 修复原代码的索引越界问题,避免i+2超出列表索引范围
        for i in range(1, len(content)-2):
            if i % 2 == 0:
                line = content[i].strip() +'|'+ content[i+2].strip()
                print(line)
                out_f.write(line + "\n")
    
  • 重定向输出场景的编码设置
    若要使用命令重定向输出,提前指定Python输出编码即可:
    • Windows CMD中执行前先运行:set PYTHONIOENCODING=utf-8,再执行myscript >> myfile.txt
    • macOS/Linux终端执行:PYTHONIOENCODING=utf-8 python3 myscript.py >> myfile.txt
  • 原文件编码不明确的检测方法
    如果按上述操作仍有乱码,可通过chardet库检测原文件实际编码:
    安装依赖:
    pip install chardet
    
    执行检测代码:
    import chardet
    with open("output_changed2.txt", "rb") as f:
        raw = f.read()
    print(chardet.detect(raw))
    
    拿到检测结果中的encoding值后,替换读写文件时的encoding参数即可。
  • Excel导入注意事项
    不要直接双击打开输出的txt文件,打开Excel后选择「数据」-「自文本/CSV」,导入时选择和输出文件一致的编码(如UTF-8),即可正常识别内容。

内容的提问来源于stack exchange,提问作者Daniel Otto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 10:24:05