Как решить UnicodeDecodeError при чтении файла с датскими символами?
Я прочитал похожие вопросы о переполнении стека, однако ни один из них не решает проблему с юникодом, которую я имею: кодек 'ascii' не может декодировать байт 0xc3 в позиции 302.
Попробовал: импорт sys reload(sys) sys.setdefaultencoding("utf-8")
однако появляется ошибка: NameError: имя 'reload' не определено
Я пытаюсь прочитать файл с датскими гласными: æ, ø, å. В ответ получить кодек UnicodeDecodeError: ascii не может декодировать байт 0xc3, позиция 302 и т. Д. Позиция 302 и далее включают датские гласные. Есть ли способ это исправить?
До сих пор я пытался поместить специально отформатированный комментарий в качестве первой строки исходного кода: # -*- coding: <ascii> -*-
, Не дал никакого результата.
Также попробовал: f = open(fname, encoding="ascii", errors="surrogate escape")
, Но вместо чтения файла с символами, как, например, в слове "Europ Euroiske", я получаю "Europ \ udcc3 \ udca6iske".
Затем я попробовал предложения из блога (потерял ссылку на этот блог), чтобы "импортировать unicodedata", однако, было не очень хорошо объяснено, где взять его форму.
import unicodedata
import csv
with open('File.csv') as f:
reader = csv.reader(f)
for row in reader:
print(row)
2 ответа
Просто откройте с правильной кодировкой. Вы должны знать кодировку, в которой был сохранен файл. Западные версии Windows могут быть Windows-1252
или возможно utf8
, Модули, такие как chardet, могут выполнить обоснованное предположение. Также для csv
модуль, открытый сnewline=''
а также (см. документацию по использованиюcsv.reader
:
import csv
with open('File.csv',encoding='utf8',newline='') as f:
reader = csv.reader(f)
for row in reader:
print(row)
Тот #-- coding:
дело только в том, что используется в самой программе, например, если вы определяете переменную или функцию с датскими символами.
вы имеете дело с вводом / выводом, так что помните правило: байты по краям, Unicode внутри. это означает использование str.decode
при чтении, и unicode.encode
при записи.