Python:空字节或控制字符

Python:空字节或控制字符,python,lxml,Python,Lxml,我目前正在使用lxml。我正在设置属性,出现以下错误: ValueError:所有字符串必须与XML兼容:Unicode或ASCII,否 空字节或控制字符 我使用同一个脚本已经好几年了,直到现在我还没有遇到任何问题(我有新的文件要处理) 如何处理空字节或控制字符?最好的解决办法可能是忽略它们。但如何做到这一点呢 我设置了如下新字符串: w.set("lem", newString) 在Jack的帮助下,我知道以下是导致错误的原因: “错误字符串为:'Bo\xdf'” 我如何处理这些案件 编辑:

我目前正在使用lxml。我正在设置属性,出现以下错误:

ValueError:所有字符串必须与XML兼容:Unicode或ASCII,否 空字节或控制字符

我使用同一个脚本已经好几年了,直到现在我还没有遇到任何问题(我有新的文件要处理)

如何处理空字节或控制字符?最好的解决办法可能是忽略它们。但如何做到这一点呢

我设置了如下新字符串:

w.set("lem", newString)
在Jack的帮助下,我知道以下是导致错误的原因:

“错误字符串为:'Bo\xdf'”

我如何处理这些案件

编辑: 使用此功能:

from curses import ascii
def clean(text):
    return str(''.join(
            ascii.isprint(c) and c or '?' for c in text
            )) 

我再也没有错误了。但是代码设置了很多“?”。我希望有正确的字符(utf-8)来代替“?”

要调试您的问题,请临时修改代码,如下所示:

try:
  w.set("lem", newString")
except ValueError:
  print("Bad string is: "+newString)

然后,您可以看到字符串是什么,并找出错误的地方以及如何处理。

这可能是因为某些字符不能出现在xml中。请给出一个您试图设置的
newString
示例。XML解析器对此要求严格的原因正是为了防止草率的“我只想忽略这个问题”解决方案。正确的解决方法是找出那些被禁止的字符是什么,是什么或是谁放在那里的,以及如何防止这种情况再次发生。(当然,你收到的错误消息通常可以更有效地指出到底是什么错了。)我编辑了我的问题。感谢您的耐心。您的字符串似乎是字节字符串而不是Unicode字符串。
\xdf
是否可能是
ß
字符?如果是这样的话,你应该试着用代码页对它进行解码。我会使用
repr(newString)
作为错误消息,这样你就可以得到不可打印字符的十六进制值。非常感谢!有了这个提示,我可以看到以下内容:“坏字符串是:'Bo\xdf'”。我如何处理这个案例(以及所有其他类似案例)?谢谢你的帮助!:)