【问题标题】:Python XML Compatible StringPython XML 兼容字符串
【发布时间】:2026-01-26 15:55:01
【问题描述】:

我正在使用 lxml 编写 XML 文件,但遇到了控制字符问题。我正在从文件中读取文本以分配给包含控制字符的元素。当我运行脚本时,我收到此错误:

ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters

所以我编写了一个小函数来用“?”替换控制字符,当我查看生成的 XML 时,控制字符似乎是新行 0x0A。有了这些知识,我编写了一个函数来编码控制字符:

def encodeXMLText(text):
    text = text.replace("&",  "&")
    text = text.replace("\"", """)
    text = text.replace("'",  "'")
    text = text.replace("<",  "&lt;")
    text = text.replace(">",  "&gt;")
    text = text.replace("\n", "&#xA;")
    text = text.replace("\r", "&#xD;")
    return text

这仍然返回与以前相同的错误。我想保留新行,所以简单地剥离它们对我来说不是一个有效的选择。不知道我在这一点上做错了什么。我正在寻找一种使用 lxml 执行此操作的方法,类似于:

  ruleTitle = ET.SubElement(rule,'title')
  ruleTitle.text = encodeXMLText(titleText)

我读过的其他问题要么不使用 lxml,要么不使用换行符 (/n) 和换行符 (/r) 作为控制字符

【问题讨论】:

标签: python xml python-2.7 lxml control-characters


【解决方案1】:

我打印出字符串以查看导致问题的特定字符并注意到文本中的这些字符:\xe2\x80\x99。所以问题是编码,改变代码看起来像这样解决了我的问题:

ruleTitle = ET.SubElement(rule,'title')
ruleTitle.text = titleText.decode('UTF-8')

【讨论】:

    最近更新 更多