2016-04-05 1 views
0

Я пытаюсь прочитать файл и преобразовать строку в UTF-8 строку, чтобы удалить некоторые не utf-8 символов в строке файла,прочитать файл и попытаться удалить все не UTF-8 символов

file_str = open(file_path, 'r').read() 
file_str = file_str.decode('utf-8') 

, но я получил следующее сообщение об ошибке,

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

Обновление: Я попробовал код, предложенный ответ,

file_str = open(file_path, 'r', encoding='utf-8').read() 

, но это не устранило символы не utf-8, так как их удалить?

+0

Вы используете python 3? В этом случае все строки являются уже юникодными объектами. Вам не нужно расшифровывать. – Sid

+3

Вы используете Python 3; 'open()' возвращает объект файла, который * уже декодирован в Unicode * для вас. Python 3 'str' - это тип Unicode, он не имеет метода' decode() ', потому что вы не можете декодировать Unicode дальше. –

+0

Возможный дубликат объекта ['str' не имеет атрибута 'decode' в Python3] (http://stackoverflow.com/questions/26125141/str-object-has-no-attribute-decode-in-python3) – Reti43

ответ

5

Удалить звонок .decode('utf8'). Данные вашего файла имеют уже были декодированы, потому что в Python 3 open() вызов с текстовым режимом (по умолчанию) возвратил объект файла, который декодирует данные в строки Unicode для вас.

Вы, вероятно, do хотите добавить кодировку к вызову open(), чтобы сделать это явным. В противном случае Python использует систему по умолчанию, и что не может быть UTF-8:

file_str = open(file_path, 'r', encoding='utf8').read() 

Например, на Windows, кодек по умолчанию почти наверняка будет неправильным для UTF-8 данных, но вы не будете см. проблему, пока не попытаетесь прочитать текст; вы обнаружите, что у вас есть Mojibake, поскольку данные UTF-8 декодируются с использованием CP1252 или аналогичного 8-битного кодека.

Дополнительную информацию см. На сайте open() function documentation.

 Смежные вопросы

  • Нет связанных вопросов^_^