我正在尝试用 python 设置一个小聊天程序。一切正常,直到我 发送了一个包含导致程序崩溃的非 ascii 字符的字符串。字符串是从 wx.TestCtrl 中读取的
如何通过套接字发送 UTF-8 编码的字符串?
为什么程序一开始就没有问题?我已经将编码设置为UTF-8 那么所有字符不会导致程序崩溃吗?
这里是错误:
Traceback (most recent call last):
File "./client.py", line 180, in sendMess
outSock.sendto(s,self.serveraddr)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 26:
ordinal not in range(128)
下面是我如何创建套接字并尝试发送消息:
outSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
....
outSock.sendto(s,self.serveraddr)
请您参考如下方法:
在 Python 2 中,套接字上的 socket.sendto 采用“普通”字符串,而不是 unicode 对象。因此,您必须对其进行编码,例如使用 UTF-8:
outSock.sendto(s.encode('utf-8'), self.serveraddr)
同样,当您在另一端recvfrom(或类似的)时,您需要转换回 Unicode 对象:
unicode_string = s.decode('utf-8')
(在 Python 3 中,您将使用 bytes,这使得它和 unicode 之间的转换需要更加明确。)
