Как решить 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 при записи.

Другие вопросы по тегам