Если у вас есть строка типа Natürlich
, то подход из вашего вопроса должен работать:
raw = 'Natürlich'
converted = raw.encode('latin-1').decode('utf-8')
print(converted)
Это печатает Natürlich
.
Обратите внимание, что NatürlichÂ
как указано в вопрос проблематичен c, потому что завершающий символ Â
является только половиной Unicode-представления чего-либо (как пара ü
ранее в слове). Это вызывает UnicodeDecodeError
.
Если вы чувствуете себя смелым, вы можете сказать декодеру игнорировать такие ошибки:
raw = 'NatürlichÃ'
converted = raw.encode('latin-1').decode('utf-8', errors='ignore')
print(converted)
-
Эти проблемы кодирования достаточно распространены, чтобы была написана библиотека для автоматического обнаружения и исправления следующих проблем кодирования: ftfy . Если вы pip install ftfy
, то вы просто должны сделать это:
import ftfy
raw = 'Natürlich'
fixed = ftfy.fix_text(raw)
print(fixed)
или вы можете изучить, что он делает:
print(ftfy.fixes.fix_one_step_and_explain(raw))
, что, в случае ваших примеров, предложило кодируйте Latin 1, декодируйте UTF-8, который вы пытались.