2009-10-29 3 views
10

Я программирую в Python, и я получаю информацию с веб-страницы через библиотеку urllib2. Проблема заключается в том, что эта страница может предоставить мне с не-ASCII символов, как 'ñ', 'á' и т.д. В тот самый момент, urllib2 получает этот характер, он вызывает исключение, например:Как обрабатывать символы Unicode (не ASCII) в Python?

File "c:\Python25\lib\httplib.py", line 711, in send 
    self.sock.sendall(str) 
File "<string>", line 1, in sendall: 
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 74: ordinal not in range(128) 

мне нужно обращаться эти персонажи. Я имею в виду, что я не хочу обрабатывать исключение, но продолжать программу. Есть ли какой-либо способ, например (я не знаю, если это что-то глупое), используйте другой codec, а не ASCII? Потому что мне нужно работать с этими символами, вставлять их в базу данных и т. Д.

+0

Было бы полезно, если бы вы могли сказать, используете ли вы Python 3+ или что-то раньше. –

+0

Не может быть Py3k, так как модуль urllib2 удален (завернут в urllib) ... –

+0

Дубликат: http://stackoverflow.com/questions/1020892/python-urllib2-read-to-unicode –

ответ

9

Вы только что прочитали набор байтов из сокета. Если вы хотите строку, которую вы должны расшифровать его:

yourstring = receivedbytes.decode("utf-8") 

(заменяя любые кодирования вы используете для utf-8)

Тогда вы должны сделать обратное, чтобы отправить его обратно:

outbytes = yourstring.encode("utf-8") 
6

Вы хотите использовать unicode для всей своей работы, если сможете.

Вы, вероятно, найти этот вопрос/ответ полезным:

urllib2 read to Unicode

0

Вы можете посмотреть в использовании фактической библиотеки синтаксического анализа, чтобы найти эту информацию. lxml, например, уже обращается к кодировке/декодированию Unicode с использованием объявленного набора символов.

+0

К сожалению, многие веб-сайты создают неправильно закодированные документы, как правило, кодировка будет в основном правильной, но будут эпизодические недействительные байтовые последовательности. Некоторым приложениям не придется беспокоиться об этом, но если вы сканируете случайные общедоступные веб-сайты, это будет проблемой. – mikerobi

Смежные вопросы