Обработка ошибок Unicode с помощью Python 3 readlines() - программирование
Подтвердить что ты не робот

Обработка ошибок Unicode с помощью Python 3 readlines()

Я продолжаю получать эту ошибку при чтении текстового файла. Можно ли обрабатывать/игнорировать его и продолжать?

UnicodeEncodeError: 'charmap codec can not decode byte 0x81 в позиции 7827: символьные карты на undefined.

4b9b3361

Ответ 1

В Python 3 передайте соответствующее значение errors= (например, errors=ignore или errors=replace) при создании вашего файлового объекта (предположим, что это подкласс io.TextIOWrapper), и если это не так, подумайте об упаковке в одном!); также рассмотрите более вероятную кодировку, чем charmap (когда вы не уверены, utf-8 всегда полезно начать).

Например:

f = open('misc-notes.txt', encoding='utf-8', errors='ignore')

В Python 2 операция read() просто возвращает байты; трюк, тогда, расшифровывает их, чтобы получить их в строку (если вы действительно хотите, чтобы символы, а не байты). Если у вас нет лучшего предположения для их реальной кодировки:

your_string.decode('utf-8', 'replace')

... для замены необработанных символов или

your_string.decode('utf-8', 'ignore')

чтобы просто игнорировать их.

Тем не менее, предпочтительнее найти и использовать их реальную кодировку (а не гадать utf-8).

Ответ 2

Вы должны открыть файл с помощью кодеков, чтобы убедиться, что файл интерпретируется как UTF8.

import codecs
fd = codecs.open(filename,'r',encoding='utf-8')
data = fd.read()

Ответ 3

Да... вы можете обернуть его в

try:
    ....
except UnicodeEncodeError: 
    pass