Кодировка для ä ü ö ß и т. Д. - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть список строк, некоторые из которых содержат такие буквы, как ä ü ö или ß. Tring, чтобы напечатать их, приводит к строкам, таким как Natürlich или Bedrückung. Как и предлагалось в других темах, я попытался решить проблему, набрав

str(word).encode("latin-1").decode("utf-8")

, однако теперь я получаю строки, подобные этой: Verkehrsl \ xc3 \ x83 \ xc2 \ xa4rm, Windb \ xc3 \ x83 \ xc2 \ xb6 , Gro \ xc3 \ x83 \ xc5 \ xb8stadt

Значения были взяты из книги с использованием spacy и nlp.

1 Ответ

0 голосов
/ 03 марта 2020

Если у вас есть строка типа 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, который вы пытались.

...