Python XML 兼容的字符串

Python XML Compatible String

我正在使用 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

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

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

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

我打印出字符串以查看导致问题的具体字符并注意到这些字符:文本中的 \xe2\x80\x99。所以问题是编码,将代码更改为这样解决了我的问题:

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