我有各种语言的字符串数据,其中部分字符串出现了一些错误的编码/解码,而另一些是正确的,我需要修复错误的字符串:
这里有一个德语单词“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
转义
您应该为您的库(ftfy)尝试修复文本:
它逐行操作,所以如果您有一个字符串,其中包含干净和损坏的字符串,但在单独的行上,ftfy可能可以处理它
注意:这不是一门精确的科学。 ftfy的工作方式涉及许多有根据的猜测。 这个工具做得很好,但它可能无法在所有情况下正确猜测。 如果可以,最好在源代码处修复错误(即首先确保所有文本都正确解码)
相关问题 更多 >
编程相关推荐