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

2024-09-30 06:28:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个中文文档,但是文档中有很多由于解码错误而留下的错误字符串,它们看起来都像fffdff10之类的。你知道吗

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

例如,错误字符串可能看起来像:300dfffdafffdnormalff0cword。你知道吗

我想要上面两个词:300danormalword。你知道吗

我不能删除所有以ff开头的四个字母的模式,因为有正常的单词是以它们开头的。你知道吗

有没有一个单一的模式可以代表他们?或者有没有其他的推荐方式?谢谢。你知道吗

顺便说一句,我是用Python做这个的,所以任何Python的方法都是非常值得赞赏的!你知道吗

谢谢。你知道吗

更新:

我最终使用了patternff(fd|\d\w|\w\d),并删除了几乎所有的错误。你知道吗

一些错误,如ff07ff50没有被删除,这很奇怪,因为它们本应该被re模式删除,但是这一点点错误在我的容忍范围内。你知道吗


Tags: 字符串文档信息错误字母模式代表解码
2条回答

我最终使用了模式ff(fd|\d\w|\w\d),删除了所有错误,但只删除了一些错误。你知道吗

有些错误,如ff07和ff50,没有被删除,这是奇怪的,因为他们应该被删除的重新模式,但这一点点的错误是在我的容忍范围内。你知道吗

不是所有你说的角色都是错误。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)

相关问题 更多 >

    热门问题