У меня есть строковые данные на разных языках, где части строк видели неправильное кодирование / декодирование, в то время как другие верны, мне нужно исправить неправильные:
Вот пример немецкого слова "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
?
РЕДАКТИРОВАТЬ:
Вот еще кое-что, с чем я столкнулся во время эксперимента:
Когда я делаю incorrect.encode("raw_unicode_escape")
, тогда получается b'ZUBEH\xc3\x96R'
.
Но когда я делаю это, например, с кириллицей c слово, подобное этому:
"Персонализированные".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
-эскейпс?