如何检测编码错误字符串?

时间:2012-06-27 10:36:49

标签: python unicode

我有一个中文文档,但是在文档中由于解码错误而留下了很多错误字符串,它们看起来都像fffdff10或其他什么。

现在我需要删除所有出现的错误字符串,所以我需要知道它们的模式,但我找不到有用的信息。现在我只想知道它们是由4个字符组成的,它们以'ff'开头,但最后两个是不确定的。

例如,错误字符串可能如下所示:300dfffdafffdnormalff0cword

上述两个字我想要的是:300danormalword

我无法删除所有以ff开头的四个字母图案,因为有正常的单词从它们开始。

是否有一个可以代表它们的重新模式?或者有其他推荐的方式吗?感谢。

顺便说一下,我在Python中这样做,所以任何Pythonic方式都非常感谢!

感谢。

更新:

我最终使用模式ff(fd|\d\w|\w\d)并删除了几乎所有错误。

有些错误(例如ff07ff50)未被删除,这很奇怪,因为它们应该已被re模式删除,但是少量错误在我的容忍范围内。

2 个答案:

答案 0 :(得分:2)

并非所有与您谈论的角色都是错误。 U + FFFD是错误替换字符,这意味着某些解码步骤无法找到要使用的字符。 U + FF0C是一个全角逗号,U + FF10是一个全宽零,这些都是完全有效的字符,可能是你要保留的字符。

如果您愿意,可以删除它们:

doc = mydoc.encode('charmap', 'ignore')

如果你有不喜欢的特定Unicode字符,那么:

bad = set(u"\ufffd\uff10\uff0c") # etc
mydoc = u"".join(c for c in mydoc if c not in bad)

答案 1 :(得分:0)

我最终使用了模式ff(fd|\d\w|\w\d)并删除了所有错误。

有些错误(例如ff07和ff50)没有被删除,这很奇怪,因为它们应该被重新模式删除,但是少量错误在我的容忍范围内。