我ftfy
用来修复UTF-8
显示为的损坏编码CP1252
并将其转换为UTF-8
西里尔字母,但我发现有些字母无法修复。
我有一个字符串Ð'010СС199
,我将其转换为字节并定义对b"\xc3\x90'010\xc3\x90\xc2\xa1\xc3\x90\xc2\xa1199"
,其中:
\xc3\x90' -> \xd0\x92 -> Cyrillic В
\xc3\x90\xc2\xa1\ -> \xd0\xa1 -> cyrillic С
如您所见,Ð'
长度为 2。ord
在这种情况下不起作用。
为了使用slice
我必须知道在哪里start
和end
。
Translate
在这里也行不通。
以前我使用过简单的字符串替换,但现在我想改进我的方法并排除错误。
原始Ð'010СС199
-> 转换 -> 输出В010СС199
编辑:
str = "Ð'010СС199"
str_to_bytes = str.encode("UTF-8")
print(str_to_bytes)
# UTF-8 bytes
# \xc3\x90\xc2\xa0 : \xd0\xa0 -> cyrillic Р
# \xc3\x90\xc2\xa1 : \xd0\xa1 -> cyrillic С
# \xc3\x90\xe2\x80\x94' : \xd0\x97 -> cyrillic З
# \xc3\x90' : \xd0\x92 -> Cyrillic В
test_str = b"\xc3\x90'010\xc3\x90\xc2\xa1\xc3\x90\xc2\xa1199"
t1 = test_str.replace(b'\xc3\x90\xc2\xa1', b'\xd0\xa1')
print(t1)
dict_cyr = {"Ð'": "P",
"С":"C"}
t2 = test_str.translate(test_str)
print(t2)
我可以解释我是如何收到结果的。1. 我用的是 2cyr.com 解码器。但即使在某些情况下也失败了。2. 我有一个手动翻译的字符串,所以我比较了它们,并在 UTF-8 图表的帮助下定义了哪个字节对应于西里尔字母。