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
- Windows CMD中执行前先运行:
- 原文件编码不明确的检测方法
如果按上述操作仍有乱码,可通过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
相关产品推荐
相关产品推荐

