def restore_windows_1252_characters(s):
"""Replace C1 control characters in the Unicode string s by the
characters at the corresponding code points in Windows-1252,
where possible.
"""
import re
def to_windows_1252(match):
try:
return bytes([ord(match.group(0))]).decode('windows-1252')
except UnicodeDecodeError:
# No character at the corresponding code point: remove it.
return ''
return re.sub(r'[\u0080-\u0099]', to_windows_1252, s)
如果要从字符串中删除所有非ASCII字符,可以使用
我认为这里有一个潜在的问题,调查并解决它可能是一个好主意,而不是试图掩盖症状。
\xc2\x95
是字符U+0095的UTF-8编码,它是一个C1 control character(消息等待)。你的图书馆不能处理这件事并不奇怪。但问题是,它是如何进入你的数据的?一种很可能的情况是,它最初是Windows-1252编码中的字符0x95(BULLET),被错误地解码为U+0095而不是正确的U+2022,然后被编码为UTF-8。(日本术语mojibake描述了这种错误。)
如果这是正确的,那么您可以通过将原始字符放回Windows-1252,然后这次将其正确解码为Unicode来恢复它们。(在这些示例中,我使用的是Python3.3;在Python2中,这些操作有些不同。)
如果要对0x80–0x99范围内的所有有效Windows-1252字符执行此更正,可以使用以下方法:
例如:
总是有正则表达式;只需在方括号内列出所有有问题的字符,如下所示:
这将打印“Hello There”,不需要的字符将替换为空格。
或者,如果每个字符有不同的替换字符:
相关问题 更多 >
编程相关推荐