如何在Python中处理Unicode(非ASCII)字符?

How to handle Unicode (non-ASCII) characters in Python?

我正在用python编程,通过urllib2库从网页获取信息。问题是,该页可以提供非ASCII字符,如'?''á'等。在urllib2得到该字符的那一刻,它引发了一个异常,如:

1
2
3
4
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)

我需要处理这些角色。我的意思是,我不想处理这个异常,而是继续这个程序。有没有办法,例如(我不知道这是否愚蠢),使用另一个编解码器而不是ASCII?因为我必须处理这些字符,将它们插入数据库等。


您只是从套接字读取一组字节。如果需要字符串,则必须对其进行解码:

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

(用您使用的任何编码替换utf-8)

然后你必须做相反的操作,把它送回:

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

如果可以的话,您希望在所有工作中使用Unicode。

您可能会发现这个问题/答案很有用:

URLLIB2读取到Unicode


您可能希望使用实际的解析库来查找此信息。例如,lxml已经使用声明的字符集对unicode编码/解码进行了寻址。