私信  •  关注

wescpy

wescpy 最近创建的主题
wescpy 最近回复了

这个错误的原因是,在Python 3中,字符串是Unicode,但是在网络上传输时,数据需要是字节字符串。所以。。。一些建议:

  1. 建议使用 c.sendall() 而不是 c.send() 为了防止可能出现的问题,您可能没有用一个调用发送整个消息(请参见 docs ).
  2. 对于文字,添加 'b' 对于字节字符串: c.sendall(b'Thank you for connecting')
  3. 对于变量,需要将Unicode字符串编码为字节字符串(请参见下文)

最佳解决方案(应同时使用2.x和3.x):

output = 'Thank you for connecting'
c.sendall(output.encode('utf-8'))

结语/背景 :这在Python2中不是问题,因为字符串已经是字节字符串了——您的操作代码将在该环境中完美工作。Unicode字符串在1.6&2.0版中添加到Python中,但在3.0版成为默认字符串类型之前一直处于次要地位。另见 this similar question 以及 this one .