Python合并txt文件写入时报UnicodeEncodeError编码错误的原因与解决方法
故障原因
- 核心触发原因是编码不匹配:读取源文件时显式指定了
utf-8编码,但写入结果文件file3.txt时没有传入encoding参数,在Windows环境下Python会默认调用系统本地的charmap编码(通常为GBK/CP936)。当读入的utf-8内容包含该默认编码无法映射的字符时,就会抛出UnicodeEncodeError,和报错栈里的错误信息完全对应。 - 原代码还存在逻辑笔误:两个文件读取块都打开了
file2.txt,实际是重复读取同一个文件两次,根本没有实现两个不同文件的合并逻辑。
修复方案
修复时需要同时解决编码不一致和逻辑笔误两个问题,核心原则是所有文件读写操作都显式指定编码,不依赖系统默认值,修正后的可运行代码如下:
data = data2 = "" # 读取第一个待合并的txt文件 with open('file1.txt', encoding='utf-8', mode='r') as fp: data = fp.read() # 读取第二个待合并的txt文件 with open('file2.txt', encoding='utf-8', mode='r') as fp: data2 = fp.read() # 拼接内容,两个文件内容间用换行分隔 data += "\n" data += data2 # 写入合并结果,显式指定utf-8编码,避免触发系统默认编码的转码错误 with open('file3.txt', encoding='utf-8', mode='w') as fp: fp.write(data)
如果你的源文件本身不是用utf-8编码存储的(比如是Windows记事本默认保存的ANSI/GBK格式),只需要把读文件时的encoding参数改成对应编码值即可,只要保证读写编码和文件实际格式一致,就不会出现这类编码报错。
内容的提问来源于stack exchange,提问作者Teriyaki
相关产品推荐
相关产品推荐

