Я читаю и анализирую 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, поскольку это читает?
Скорее всего, ваша проблема в том, что вы разобрали его нормально, а теперь пытаетесь распечатать содержимое XML и не можете, потому что там есть некоторые посторонние символы Юникода. Попробуйте сначала закодировать вашу строку Юникода как ascii:
unicodeData.encode('ascii', 'ignore')
часть 'ignore' скажет ему просто пропустить эти символы. Из документации по python:
>>> u = unichr(40960) + u'abcd' + unichr(1972)
>>> u.encode('utf-8')
'\xea\x80\x80abcd\xde\xb4'
>>> u.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode character '\ua000' in position 0: ordinal not in range(128)
>>> u.encode('ascii', 'ignore')
'abcd'
>>> u.encode('ascii', 'replace')
'?abcd?'
>>> u.encode('ascii', 'xmlcharrefreplace')
'ꀀabcd޴'
Возможно, вы захотите прочитать эту статью: http://www.joelonsoftware.com/articles/Unicode.html, которую я нашел очень полезной в качестве базового руководства по тому, что происходит. После прочтения вам перестанет казаться, что вы просто гадаете, какие команды использовать (по крайней мере, так было со мной).
Вы можете использовать что-то вроде
s.decode('utf-8')
которая преобразует байтстринг в кодировке UTF-8 в строку Python Unicode. Но точная процедура зависит от того, как именно вы загружаете и разбираете XML-файл, например, если вы никогда не обращаетесь к XML-строке напрямую, вам, возможно, придется использовать объект декодера из модуля codecs
.