替换无法编码的字符

问题描述

我目前正在做一些我需要从网站上提取.xml并与之合作的事情。

一切正常,但是如果我尝试打印.xml(或解析后的文本)并且.xml中有一些字符无法编码,我会收到错误消息: / p>

return codecs.charmap_encode(input,self.errors,encoding_table)
[0]UnicodeEncodeError: 'charmap' codec can't encode character '\u2665' in position 1161: character maps to <undefined>

现在,我想找到这些字符并将其替换为“?”例如。

我该怎么做?

是否有更好的方法来处理这些错误

解决方法

如果您编写了生成该错误的代码,则通常在任何情况下都可以更轻松地为您提供帮助,您可以在utf8中对字符串进行编码,然后进行解码:

data = '\u2665'
data = data.encode('utf8')
print(data)  # b'\xe2\x99\xa5'
data_d = data.decode('utf8')
print(data_d)  # ♥

此外,您可以在脚本的开头添加以下行:

# -*- coding: utf-8 -*-

,然后使用以下命令验证stdout.encoding

import sys
print(sys.stdout.encoding)