这个错误的原因是,在Python 3中,字符串是Unicode,但是在网络上传输时,数据需要是字节字符串。所以。。。一些建议:
-
建议使用
c.sendall()
而不是
c.send()
为了防止可能出现的问题,您可能没有用一个调用发送整个消息(请参见
docs
).
-
对于文字,添加
'b'
对于字节字符串:
c.sendall(b'Thank you for connecting')
-
对于变量,需要将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
.