[英]How to retrieve correct value of a UTF-8 encoded (from unicode) string from a file from Python3 which was encoded using Python2?
[英]How to distinguish between a correct and a botched unicode encoded string in 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'
我怎样才能可靠地只找到那些像ZUBEHÃ\\x96R
那样包含这些奇怪的 unicode 字符的字符串?
编辑:
这是我在试验时偶然发现的其他东西:
当我执行incorrect.encode("raw_unicode_escape")
,结果是b'ZUBEH\\xc3\\x96R'
。
但是当我用这样的西里尔字母来做这个时:
"Персонализированные".encode("raw_unicode_escape")
那么结果是b'\\\П\\\е\\\р\\\с\\\о\\\н\\\а\\\л\\\и\\\з\\\и\\\р\\\о\\\в\\\а\\\н\\\н\\\ы\\\е'
为什么我在第一种情况下得到
\\x
-escapes 而在第二种情况下得到\\u\u003c/code> -escapes 同时做完全相同的事情?
为什么我可以
.decode("utf8")
将\\x
-escapes 转换为可读格式而不是\\u\u003c/code> -escapes?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.