Как обрабатывать символы 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 с использованием объявленного набора символов.