Я использую 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.