#python #utf-8
#python #utf-8
Вопрос:
Я получаю текстовый файл, но некоторые символы в нем неверны.
Одним из примеров является текст ниже:
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?
Комментарии:
1. Можете ли вы показать код, в котором вы получаете эту строку? Например. путем открытия указанного текстового файла.
2. Я получаю текст из файла csv
Ответ №1:
Строка является результатом декодирования необработанных байтов 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
шагов не требуется.
Ответ №2:
Я думаю, что исходный текст находится в iso-8859-1. Это исправит это:
>>> s = 'Apresentação/ divulgação do curso'
>>> bytes(s, 'iso-8859-1').decode('utf-8')
'Apresentação/ divulgação do curso'
Комментарии:
1. Текст изначально был в UTF-8, но кто-то (код операционной системы?) Изначально ошибочно декодировал его с использованием ISO-8859-1.