Skip to main content
 首页 » 编程设计

python之使用套接字发送 UTF-8

2025年05月04日16jirigala

我正在尝试用 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 之间的转换需要更加明确。)