Я не уверен, каковы критерии @ melpomene для "знания того, что они делают", но следующее решение уже работало , например, для декодирования испорченного текста на иврите :
("\\u00c3\\u00a4"
.encode('latin-1')
.decode('unicode_escape')
.encode('latin-1')
.decode('utf-8')
)
Выходы:
'ä'
Это работает следующим образом:
- Строка, содержащая только символы ascii
'\'
, 'u'
, '0'
, '0'
, 'c'
и т. Д. Преобразуется в байты с использованием некоторой не слишком сумасшедшей 8-битной кодировки (на самом деле не имеет значения, какая именно, если она правильно обрабатывает символы ASCII) - Использование декодеракоторый интерпретирует экранирование
'\u00c3'
как кодовую точку Unicode U + 00C3 (LATIN CAPITAL A LTERIN WITH TILDE, 'Ã').С точки зрения вашего кода, это бессмыслица, но эта кодовая точка Unicode имеет правильное представление байтов при повторном кодировании с ISO-8859-1
/ 'latin-1'
, поэтому ... - закодируйте его снова с
'latin-1'
- На этот раз «правильно» расшифруйте его, как UTF-8
Опять то же замечание, что и в связанном посте: прежде чем вкладывать слишком много энергии, пытаясь починить сломанный текст,вы можете попытаться исправить часть кода, которая выполняет кодирование, таким странным образом.