python - 如何修复 UnicodeDecodeError
问题描述
我正在编写一个asyncio web-sockets应用程序。我有我的客户端和服务器以 json 格式交换数据。有时作为对客户端的响应,服务器返回音频数据。我将该数据编码为base64并解码为utf-8。但是当我发送带有音频数据的 json 时,web-socket 客户端无法解码该数据并引发“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
解决方案
很可能,您的框架希望您输出bytes
,因此:
await wbsocket.send(json.dumps(...).encode(...))
尼特夫妇:
b64encode
由于base64的字符集受限,可以用“ascii”和“utf-8”解码json.dumps
默认情况下转义 unicode,因此.encode("utf-8")
应该.encode("ascii")
产生相同的结果websockets
文档没有指定输入是否期望和输出产生str
或bytes
......