Кодировка символов, XML, Excel, python

Я читаю список строк, которые были импортированы в файл excel xml из другого программного обеспечения. Я не уверен, что такое кодировка excel-файла, но я уверен, что это не windows-1252, потому что, когда я пытаюсь использовать эту кодировку, у меня возникает много ошибок.

Конкретное слово, которое вызывает у меня проблемы сейчас: «Змысловска, Магдалена» (обратите внимание, что «l» не является стандартом «l», а скорее имеет косую черту).

Я пробовал несколько вещей, я упоминал о трех из них здесь:

(1)

page = unicode(page, "utf-8") page = unicodedata.normalize("NFKD", page) page = page.encode("utf-8", "ignore") Output: Zmys\xc5\x82owska, Magdalena Output after print statement: Zmysłowska, Magdalena 

(2)

 page = unicode(page, "utf-8") page = unicodedata.normalize("NFKD", page) Output: Zmys\u0142owska, Magdalena Output after print statment: Zmysłowska, Magdalena Note: this is great, but I need to encode it back to utf-8 before putting the string into my db. When I do that, by running page.encode("utf-8", "ignore"), I end up with ZmysÅ‚owska, Magdalena again. 

(3) Ничего не делать (без нормализации, без декодирования, без кодирования). Похоже, что строка уже utf-8, когда она входит. Однако, когда я ничего не делаю, строка заканчивается следующим выходом:

 Output: Zmys\xc5\x82owska, Magdalena Output after print statement: Zmysłowska, Magdalena 

Есть ли способ преобразовать эту строку в utf-8?

Ваша проблема не в кодировании и декодировании. Ваш код правильно берет строку UTF-8 и преобразует ее в нормированную NFKD строку UTF-8. (Возможно, вы захотите использовать page.decode("utf-8") вместо unicode(page, "utf-8") только для будущей проверки, если вы когда-нибудь заходите на Python 3, и чтобы сделать код немного проще чтобы читать, потому что encode и decode более очевидно параллельны, но вам не нужно, эти два эквивалента.)

На самом деле проблема заключается в том, что вы печатаете строки UTF-8 в некоторый контекст, который не является UTF-8. Скорее всего, вы печатаете в окне cmd , которое по умолчанию используется для Windows-1252. Итак, cmd пытается интерпретировать символы UTF-8 как Windows-1252 и получает мусор.

Это довольно простой способ проверить это. Сделайте Python декодировать строку UTF-8, как если бы это была Windows-1252, и посмотреть, будет ли полученная строка Unicode выглядеть так, как вы видите.

 >>> print page.decode('windows-1252') Zmysłowska, Magdalena >>> print repr(page.decode('windows-1252')) u'Zmys\xc5\u201aowska, Magdalena' 

Существует два пути:

  1. Распечатайте строки Unicode и пусть Python позаботится об этом.
  2. Строки печати преобразуются в соответствующую кодировку.

Для варианта 1:

 print page.decode("utf-8") # of unicode(page, "utf-8") 

Для варианта 2 это будет одно из следующего:

 print page.decode("utf-8").encode("windows-1252") print page.decode("utf-8").encode(sys.getdefaultencoding()) 

Конечно, если вы сохраняете промежуточную строку Unicode, вам не нужны все эти decode вызовы:

 upage = page.decode("utf-8") upage = unicodedata.normalize("NFKD", upage) page = upage.encode("utf-8", "ignore") print upage 
  • как работает mb_convert_encoding?
  • Pandas: ascii codec can not encode character в позиции порядкового номера не в диапазоне - какая ячейка?
  • Проблема Excel с CSV-файлом с кодировкой
  • Pandas: сохранить для исключения кодировки
  • Действие Web API возвращает FileContentResult, который, если он сохранен как .csv, будет отображаться как тарабарщина, а если в качестве .txt - это нормально. Зачем?
  • Как кодировать UTF-8 для XML-документа в Java
  • как экспортировать файл excel в csv с кодом «|» и кодом utf-8
  • Экспорт HTML-таблицы в xls в UTF-8 для Mac и ПК.
  • Сохранить файл как CSV UTF8 дает ошибку 1004
  • excel utf-8 csv export и разделитель
  • Открытие CSV с помощью спецификации UTF-8 через Excel
  • Interesting Posts

    необходимо заменить изображение внутри текстового документа на таблицу Excel

    Открыть файл из Outlook в Excel и сохранить в другом формате в зависимости от отправителя

    Как вызвать библиотеки C # из Excel?

    Автоматизация Excel C #: Как удалить несколько строк?

    MSACCESS VBA: добавление границ в лист Excel

    Невозможно оценить выражение, потому что код оптимизирован или собственный кадр находится поверх стека вызовов

    VLOOKUP с другого листа

    Усреднение и добавление данных в неизвестном количестве одинаковых строк

    Чтение / запись с помощью Apache POI

    загружать данные в Db через excel

    Список вкладок Excel и диаграмм

    Переупорядочить и перегруппировать собранные данные

    Простая кнопка добавления надстроек Excel C # для цветных ячеек

    Генератор паролей продолжает генерировать одну и ту же последовательность паролей

    Как применить одни и те же инструкции IF к нескольким ячейкам в одном столбце? (EXCEL)

    Давайте будем гением компьютера.