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

Python写入XML报charmap编码错误,加encoding后报需str非bytes如何解决?

问题原因及解决方案

核心问题

你混淆了Python内置open()函数的参数和xml.etree.ElementTree.ElementTree.write()方法的参数逻辑,同时初始代码存在语法错误。

错误原因拆解

  • 第一个charmap编码错误:Windows系统默认文本编码为GBK/CP936,无法编码ᵒ这类特殊Unicode字符,加上初始代码语法错误,encoding='unicode'参数没有正确传入write方法,写入时自动使用系统默认编码导致报错。
  • 第二个write() argument must be str, not bytes错误:你错误传入了打开模式参数'w',当你给write方法第一个参数传文件路径字符串时,方法内部会自动处理文件打开逻辑,不需要额外传模式。多余的'w'会被错误识别为encoding参数值,或者导致方法以文本模式打开文件,但你指定encoding='utf-8'时write方法会输出字节流,字节流写入文本模式的文件对象就会触发类型不匹配错误。
  • 额外语法问题:你贴出的两次代码都存在括号不匹配的问题,Python对语法格式要求严格,写代码时要注意括号、缩进的正确性。

正确写法

推荐最简单的写法,直接传入路径和编码参数即可,不需要多余的模式参数:

import xml.etree.ElementTree as ET

tree = ET.ElementTree(root)
# xml_declaration=True会在XML头部声明编码为utf-8,避免后续解析乱码
tree.write("Cool_Output.xml", encoding="utf-8", xml_declaration=True)

如果你习惯手动控制文件打开流程(和你之前用的JS/C#写法逻辑类似),可以用上下文管理器手动打开文件:

import xml.etree.ElementTree as ET

tree = ET.ElementTree(root)
# 文本模式打开,指定编码为utf-8
with open("Cool_Output.xml", 'w', encoding="utf-8") as f:
    tree.write(f, encoding='unicode')

或者二进制模式写入:

import xml.etree.ElementTree as ET

tree = ET.ElementTree(root)
# 二进制模式打开
with open("Cool_Output.xml", 'wb') as f:
    tree.write(f, encoding="utf-8")

内容的提问来源于stack exchange,提问作者Mi-krater

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:27:04