我正在编写一个asyncio web-sockets应用。我有客户端和服务器正在交换json格式的数据。有时,作为对客户端的响应,服务器返回音频数据。我将这些数据编码为base64,然后解码为utf-8。但是,当我发送带有音频数据的json时,网络套接字客户端无法解码该数据并引发“ UnicodeDecodeError”
这就是我从服务器发送数据的方式
. . .
# audio_data is binary data from ".wav" file
response = {
'status': 'success',
'data': base64.b64encode(audio_data).decode('UTF-8')
}
# send data throught socket
await websocket.send(json.dumps(response))
. . .
接收发送数据的代码(这是我收到的错误)
. . .
# Receive data from web-socket server
response = await websocket.recv()
. . .
我收到的错误
Traceback (most recent call last):
File ".../env/lib/python3.6/site-packages/websockets/protocol.py", line 674, in transfer_data
message = yield from self.read_message()
File ".../env/lib/python3.6/site-packages/websockets/protocol.py", line 757, in read_message
return frame.data.decode('utf-8') if text else frame.data
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf0 in position 51872: invalid continuation byte
答案 0 :(得分:1)
您的框架很可能希望您输出bytes
,因此:
await wbsocket.send(json.dumps(...).encode(...))
尼特夫妇:
b64encode
可以使用“ ascii”以及“ utf-8”进行解码json.dumps
默认情况下转义unicode,因此.encode("utf-8")
和.encode("ascii")
应该产生相同的结果websockets
文档未指定输入期望和输出产生str
还是bytes
...