如何在Python中区分正确的unicode编码字符串和错误的unicode编码字符串?

2024-09-29 19:12:27 发布

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

我有各种语言的字符串数据,其中部分字符串出现了一些错误的编码/解码,而另一些是正确的,我需要修复错误的字符串:

这里有一个德语单词“Zubehör”的例子:

correct = "ZUBEHÖR"
incorrect = "ZUBEHÃ\x96R"

我已经发现我可以纠正如下错误:

incorrect.encode("raw_unicode_escape").decode("utf8")

但是,对正确的字符串使用此选项会产生错误。我可以迭代所有字符串并使用try-语句,但我不知道这是否可靠,我想知道一种更优雅的方法

另外,虽然打印时会写出\x96,但实际上只有一个字符:

incorrect[-3]
Out[34]: 'Ã'

incorrect[-2]
Out[33]: '\x96'

我如何才能可靠地只找到那些包含这些奇数unicode字符的字符串,比如ZUBEHÃ\x96R

编辑:

下面是我在实验中偶然发现的一些东西:

当我做incorrect.encode("raw_unicode_escape")时,结果是b'ZUBEH\xc3\x96R'

但当我用西里尔语这样的词来做这件事时:

"Персонализированные".encode("raw_unicode_escape")

然后结果是b'\\u041f\\u0435\\u0440\\u0441\\u043e\\u043d\\u0430\\u043b\\u0438\\u0437\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0435'

为什么我在做完全相同的事情时,在第一种情况下得到\x逃逸,在第二种情况下得到\u逃逸

为什么我可以.decode("utf8")\x转义返回到可读的格式,而不是\u转义


Tags: 字符串raw错误unicodeutf8out字符encode
1条回答
网友
1楼 · 发布于 2024-09-29 19:12:27

您应该为您的库(ftfy)尝试修复文本:

>>> import ftfy
>>> ftfy.fix_text("ZUBEHÃ\x96R")
'ZUBEHÖR'

它逐行操作,所以如果您有一个字符串,其中包含干净和损坏的字符串,但在单独的行上,ftfy可能可以处理它

注意:这不是一门精确的科学。 ftfy的工作方式涉及许多有根据的猜测。 这个工具做得很好,但它可能无法在所有情况下正确猜测。 如果可以,最好在源代码处修复错误(即首先确保所有文本都正确解码)

相关问题 更多 >

    热门问题