Я читаю и разбираю XML-файл Amazon, и, хотя в XML-файле отображается ', при попытке его распечатать я получаю следующую ошибку:
'ascii' codec can't encode character u'\u2019' in position 16: ordinal not in range(128)
Из того, что я читал в Интернете, ошибка возникает из-за того, что XML-файл находится в UTF-8, но Python хочет обрабатывать его как символ в кодировке ASCII. Есть ли простой способ избавиться от ошибки и заставить мою программу печатать XML по мере чтения?
unicode()
?Ответы:
Вероятно, ваша проблема в том, что вы правильно его проанализировали, и теперь вы пытаетесь распечатать содержимое XML и не можете, потому что есть некоторые иностранные символы Unicode. Попробуйте сначала закодировать вашу строку Unicode как ascii:
часть «игнорировать» скажет ему просто пропустить эти символы. Из документов python:
Возможно, вы захотите прочитать эту статью: http://www.joelonsoftware.com/articles/Unicode.html , которую я нашел очень полезной в качестве базового руководства по происходящему. После прочтения вы перестанете чувствовать, что просто гадаете, какие команды использовать (или, по крайней мере, это случилось со мной).
источник
.encode('ascii', 'ignore')
теряет данные без необходимости, даже если среда OP может поддерживать символы, отличные от ascii (в большинстве случаев)Лучшее решение:
Если вы хотите узнать больше о том, почему:
http://docs.plone.org/manage/troubleshooting/unicode.html#id1
источник
u'\u2019
уже Unicode.Не кодируйте кодировку символов вашего окружения внутри скрипта; вместо этого напечатайте текст Unicode напрямую:
Если ваш вывод перенаправлен в файл (или канал); вы можете использовать
PYTHONIOENCODING
envvar, чтобы указать кодировку символов:В противном случае,
python your_script.py
должен работать как - ваши региональные настройки используются для кодирования текста (на проверки POSIX:LC_ALL
,LC_CTYPE
,LANG
envvars - наборLANG
в кодировке UTF-8 локали , если это необходимо).Чтобы распечатать Unicode в Windows, см. Этот ответ, в котором показано, как распечатать Unicode в консоли Windows, в файл или с помощью IDLE .
источник
Отличный пост: http://www.carlosble.com/2010/12/understanding-python-and-unicode/
источник
Вы можете использовать что-нибудь в форме
который преобразует байтовую строку в кодировке UTF-8 в строку Python Unicode. Но точная процедура, которую следует использовать, зависит от того, как именно вы загружаете и анализируете XML-файл, например, если вы никогда не обращаетесь к XML-строке напрямую, вам, возможно, придется использовать объект декодера из
codecs
модуля .источник
'...'.encode('utf-8')
Я написал следующее, чтобы исправить неприятные кавычки, отличные от ascii, и принудительно преобразовать их во что-то пригодное для использования.
источник
Если вам нужно вывести на экран приблизительное представление строки, а не игнорировать эти непечатаемые символы, попробуйте
unidecode
пакет здесь:https://pypi.python.org/pypi/Unidecode
Объяснение находится здесь:
https://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/
Это лучше, чем использовать
u.encode('ascii', 'ignore')
для данной строкиu
, и может избавить вас от ненужной головной боли, если точность символа не то, что вам нужно, но все же нужно, чтобы человек читал.Wirawan
источник
Попробуйте добавить следующую строку вверху вашего скрипта python.
источник
Python 3.5, 2018 г.
Если вы не знаете, какая кодировка, но у парсера юникода возникают проблемы, вы можете открыть файл
Notepad++
и выбрать в верхней панелиEncoding->Convert to ANSI
. Затем вы можете написать свой питон следующим образомисточник