gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:31:48 24 4
gpt4 key购买 nike

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

以下是德语单词“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

编辑:

这是我在实验时偶然发现的其他东西:

当我执行in Correct.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-escapes,而在第二种情况下会得到 \u-escapes?

为什么我可以 .decode("utf8")\x 转义为可读格式,但不能将 \u 返回-逃脱?

最佳答案

您应该尝试 Fixs-text-for-you 库 ( ftfy ):

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

它逐行运行,因此如果您有一个包含干净字符串和损坏字符串的字符串,但在不同的行上,ftfy 可能可以处理它。

注意:这不是一门精确的科学。ftfy 的工作方式涉及很多有根据的猜测。该工具制作精良,但它可能无法在您遇到的所有情况下正确猜测。如果可以的话,最好从源头修复错误(即确保所有文本首先正确解码)。

关于python - 如何在 Python 中区分正确的和错误的 unicode 编码字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59873320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com