将 bytearray 反向移植到 Python 2.5
Backporting bytearray to Python 2.5
我正在尝试将 this websocket 示例转换为在 Python 2.5 中使用,但是 运行 在使用 bytearray 类型时出现错误。
代码在这里停止为 Python 2.5 工作(在 websocket_server/websocket_server.py 的 send_text 方法中):
FIN = 0x80
OPCODE = 0x0f
def send_text(self, message):
header = bytearray();
payload = encode_to_UTF8(message)
payload_length = len(payload)
header.append(FIN | OPCODE_TEXT)
header.append(payload_length)
self.request.send(header + payload)
消息变量存储发送给客户端的字符串输入。
它尝试创建一个字节数组并使用 self.request.send 方法发送它。我将如何更改它以使其在没有字节类型或 bytearray 的 Python 2.5 中工作?
使用 struct MIGHT 可以工作,我还没有测试过。
作为解决方法,我会做的是使用 struct.pack 逐字节打包。
mensaje = "saludo"
FIN = 0x80
OPCODE = 0x0f
payload = ''
for c in mensaje:
payload += struct.pack("H", ord(c))
msj = struct.pack("H",FIN | OPCODE )
msj+= struct.pack("H",len(payload))
print msj + payload
我在 struct.pack 函数中使用 "H" 作为 'fmt' 参数,但您最好检查一下您的包裹是如何发送的以及每个 'character' 有多少字节(因为我猜你使用的是 unicode,所以我使用的是 'H',unsigned short = 2 bytes)。
更多信息:https://docs.python.org/2/library/struct.html,第 7.3.2.1 和 7.3.2.2 节。
编辑:
我会在这里回答,使用 'chr()' 而不是 'struct.pack()':
是什么意思
mensaje = "saludo"
FIN = 0x80
OPCODE = 0x0f
payload = mensaje
msj = chr( FIN | OPCODE )
msj+= chr(len(payload))
print msj + payload
如果你打印消息,那么你在使用 struct.pack("B", ord(something))
时应该看到与使用 ord(something)
时相同的输出,我只是使用 struct.pack() 因为我认为你的消息是每个字符两个字节(作为 unicode)。
我正在尝试将 this websocket 示例转换为在 Python 2.5 中使用,但是 运行 在使用 bytearray 类型时出现错误。
代码在这里停止为 Python 2.5 工作(在 websocket_server/websocket_server.py 的 send_text 方法中):
FIN = 0x80
OPCODE = 0x0f
def send_text(self, message):
header = bytearray();
payload = encode_to_UTF8(message)
payload_length = len(payload)
header.append(FIN | OPCODE_TEXT)
header.append(payload_length)
self.request.send(header + payload)
消息变量存储发送给客户端的字符串输入。
它尝试创建一个字节数组并使用 self.request.send 方法发送它。我将如何更改它以使其在没有字节类型或 bytearray 的 Python 2.5 中工作?
使用 struct MIGHT 可以工作,我还没有测试过。
作为解决方法,我会做的是使用 struct.pack 逐字节打包。
mensaje = "saludo"
FIN = 0x80
OPCODE = 0x0f
payload = ''
for c in mensaje:
payload += struct.pack("H", ord(c))
msj = struct.pack("H",FIN | OPCODE )
msj+= struct.pack("H",len(payload))
print msj + payload
我在 struct.pack 函数中使用 "H" 作为 'fmt' 参数,但您最好检查一下您的包裹是如何发送的以及每个 'character' 有多少字节(因为我猜你使用的是 unicode,所以我使用的是 'H',unsigned short = 2 bytes)。
更多信息:https://docs.python.org/2/library/struct.html,第 7.3.2.1 和 7.3.2.2 节。
编辑: 我会在这里回答,使用 'chr()' 而不是 'struct.pack()':
是什么意思mensaje = "saludo"
FIN = 0x80
OPCODE = 0x0f
payload = mensaje
msj = chr( FIN | OPCODE )
msj+= chr(len(payload))
print msj + payload
如果你打印消息,那么你在使用 struct.pack("B", ord(something))
时应该看到与使用 ord(something)
时相同的输出,我只是使用 struct.pack() 因为我认为你的消息是每个字符两个字节(作为 unicode)。