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

Etree编辑XML写入新文件时°C被转为°C的原因是什么?

转义原因

这种字符替换是XML解析器的默认合规处理逻辑,核心触发点有两个:

  • 原始XML本身不符合语法规范:XML要求所有属性值必须用单/双引号包裹,你示例中Units=°C没有加引号,etree读取阶段就会自动对属性中的非ASCII字符做实体编码修正,将°符号转换为对应的Unicode数字实体°。
  • etree默认输出XML时,为了兼容所有编码环境,会自动把所有非ASCII字符、XML预定义特殊字符转义为实体形式,进一步固化了这个转义结果。
解决方案

要保留原始的°C格式,按以下步骤调整即可:

  1. 先修正原始XML的语法,给所有属性值加引号:<parameter name="Temperature" Units="°C">30</parameter>,避免读取阶段的自动修正转义。
  2. 调用写入方法时指定正确的输出参数,示例代码如下:
import xml.etree.ElementTree as ET

# 读取并修改XML的逻辑
tree = ET.parse("你的配置文件路径.xml")
temp_node = tree.find('.//parameter[@name="Temperature"]')
temp_node.text = "200"

# 写入时添加参数关闭非ASCII字符转义
tree.write(
    "输出文件路径.xml",
    encoding="utf-8",
    xml_declaration=True,
    method="html"
)

补充说明:method="html"是核心参数,HTML输出模式下不会对UTF-8可直接表示的非ASCII字符做实体转义,即可保留原始的°C格式。如果使用lxml库的etree实现,额外添加pretty_print=True参数还可以同时保证输出文件的格式化缩进效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:09:02