我正在尝试让一个基本的服务器(从开头的Python复制)来发送一个字符串。
错误:
c.send( "XXX" )
TypeError: must be bytes or buffer, not str
它似乎在酸洗对象时起作用。我找到的所有例子,似乎都能发送一个字符串没有问题。
任何帮助都会很感激,
斯蒂芬
import socket
import pickle
s = socket.socket()
host = socket.gethostname()
port = 80
s.bind((host, port))
s.listen(5)
while True:
c, addr = s.accept()
print( "Got Connection From ", addr )
data = pickle.dumps(c)
c.send( "XXX" )
#c.send(data)
c.close()
发布于 2010-03-09 19:36:34
似乎您尝试在Python3中使用Python2.x示例,并且您触及了这些Python版本之间的主要区别之一。
对于Python <3,“字符串”实际上是二进制字符串,而“Unicode对象”是正确的文本对象(因为它们可以包含任何Unicode字符)。
在Python3中,unicode字符串是“常规字符串”(str),字节字符串是单独的对象。
低级I/O只能处理数据(字节字符串),不能处理文本(字符序列)。对于Python 2.x,str也是“二进制数据”类型。在Python3中,它不再存在,应该使用一个特殊的“data”对象。对象被酸洗成这样的字节字符串。如果您想在代码中手动输入它们,请使用"b“前缀(b"XXX”而不是"XXX")。
发布于 2010-03-09 19:54:27
补充Jacek Konieczny的答案:您还可以使用str.encode()从字符串中获取字节。如果将字符串放在变量中而不是文字中,则可以调用encode,它将返回等效的一系列字节。
https://stackoverflow.com/questions/2411864
复制相似问题