Как обрабатывать символы Unicode (не ASCII) в Python?

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

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? Потому что мне нужно работать с этими символами, вставлять их в базу данных и т.д.

Ответ 1

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

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

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

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

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

Ответ 2

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

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

urllib2 читается в Юникоде

Ответ 3

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