Unicode Python кодирует ошибку

Я читаю и анализирую 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, поскольку это читает?

100
задан juliomalegria 27 April 2012 в 04:17
поделиться

2 ответа

Скорее всего, ваша проблема в том, что вы разобрали его нормально, а теперь пытаетесь распечатать содержимое 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')
'&#40960;abcd&#1972;'

Возможно, вы захотите прочитать эту статью: http://www.joelonsoftware.com/articles/Unicode.html, которую я нашел очень полезной в качестве базового руководства по тому, что происходит. После прочтения вам перестанет казаться, что вы просто гадаете, какие команды использовать (по крайней мере, так было со мной).

189
ответ дан 24 November 2019 в 04:51
поделиться

Вы можете использовать что-то вроде

s.decode('utf-8')

которая преобразует байтстринг в кодировке UTF-8 в строку Python Unicode. Но точная процедура зависит от того, как именно вы загружаете и разбираете XML-файл, например, если вы никогда не обращаетесь к XML-строке напрямую, вам, возможно, придется использовать объект декодера из модуля codecs.

0
ответ дан 24 November 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: