Преобразование символов с помощью Python - PullRequest
1 голос
/ 21 марта 2019

Я получаю текстовый файл, но некоторые символы на нем неверны.

Одним из примеров является текст ниже:

Apresentação/ divulgação do curso

Но правильный текст -

Apresentação/ divulgação do curso

Я использую функцию Php utf8_decode, и она работает, см. Пример ниже

echo utf8_decode("Apresentação/ divulgação do curso");
result Apresentação/ divulgação do curso

но я не могу заставить его работать в Python, я пытаюсь использовать

my_str = 'Apresentação/ divulgação do curso'
print( my_str.decode("utf-8") )

Но я получил следующую ошибку:

AttributeError: 'str' object has no attribute 'decode'

Как я могу заставить это работать в Python?

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Строка является результатом декодирования необработанных байтов UTF-8 как latin-1. Так что просто перекодируйте их как latin-1, а затем расшифруйте как utf-8:

>>> my_str = 'Apresentação/ divulgação do curso'
>>> print( my_str.encode('latin-1').decode("utf-8") )
Apresentação/ divulgação do curso

Если это происходит из файла, который вы open редактировали в Python, вы, вероятно, использовали latin-1 (или аналогичный cp1252) в качестве кодировки по умолчанию для open. В этом случае правильное решение состоит в том, чтобы предоставить правильную кодировку для open, чтобы она сначала правильно декодировалась, изменяя что-то вроде:

with open('myfile.txt') as f:
    my_str = f.read()

до:

with open('myfile.txt', encoding='utf-8') as f:
    my_str = f.read()

, поэтому дополнительные шаги encode или decode не требуются.

1 голос
/ 21 марта 2019

Я думаю, что исходный текст находится в ISO-8859-1. Это исправит это:

>>> s = 'Apresentação/ divulgação do curso'
>>> bytes(s, 'iso-8859-1').decode('utf-8')
'Apresentação/ divulgação do curso'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...