是否有可能的规范化路径使下面的两个字符串达到相同的值?
u'Aho\xe2\u20ac\u201cCorasick_string_matching_algorithm'
u'Aho\u2013Corasick string matching algorithm'
是否有可能的规范化路径使下面的两个字符串达到相同的值?
u'Aho\xe2\u20ac\u201cCorasick_string_matching_algorithm'
u'Aho\u2013Corasick string matching algorithm'
看起来您那里有一个Mojibake,UTF-8 字节已被解码,就好像它们是 Windows-1252 数据一样。编码为 Windows-1252 的 3 个“字符”为目标字符串中的 U+2013 EN DASH 字符生成精确的 3 个 UTF-8 字节:
>>> u'\u2013'.encode('utf8')
'\xe2\x80\x93'
>>> u'\u2013'.encode('utf8').decode('windows-1252')
u'\xe2\u20ac\u201c'
您可以使用该ftfy
模块来修复该数据,因此您会得到一个 emdash 字节:
>>> import ftfy
>>> sample = u'Aho\xe2\u20ac\u201cCorasick_string_matching_algorithm'
>>> ftfy.fix_text(sample)
u'Aho\u2013Corasick_string_matching_algorithm'
然后只需用空格替换下划线:
>>> ftfy.fix_text(sample).replace('_', ' ')
u'Aho\u2013Corasick string matching algorithm'
您也可以简单地编码为 Windows-1252 并再次解码为 UTF-8,但这并不总是有效,因为有些特定的字节不能合法地解码为 Windows-1252,但一些生产这些 Mojibakes 的系统无论如何都会这样做。ftfy
包括专门的修复编解码器来逆转该过程。此外,它还会检测特定的 Mojibake 错误,以跨多个可能的编解码器错误自动执行该过程。