我需要将序列化对象(我使用pickle)的字节字符串转换为普通字符串。我需要这样做的原因是因为我需要获取包的数量而我不能直接将b' 0转换为0。
我试图反序列化字节字符串,但它不起作用。我甚至尝试使用.decode(' utf-8'),但正如预期的那样,它失败了。
我的UDP数据报带有索引。在#之前,它是第一个附着在酸洗物体上的东西。我需要检索该号码
如何将序列化对象字节字符串转换为常规字符串?或者,如果这不是一个选项,那么获得我的包裹号码的最佳方式是什么?
因为我无法发布图像,所以这里是代码中的上下文:
服务器代码:
while True:
print("In while.")
(received,address) = serverSocket.recvfrom(MAX_SIZE)
print("Received.")
#try:
print("In try.")
print("Raw received:",received)
print("Deserialized received:",pickle.load(received))
receivedPackageIndex = str(pickle.load(received)).split('#', 1)[0]
print("Received package:" , receivedPackageIndex)
if int(receivedPackageIndex) > maxPackageReceived:
print("Appending package ",receivedPackageIndex)
audioPicklestring += str(received).split("#",1)[1]
输出:
Received.
In try.
Raw received: b'0#\x80\x03cspeech_recognition\nAudioData\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00dataq\x03BM\xda\x00\x00fLaC\x00\x00\x00"\x10\x00\x10\x00\x00\x00\x00\x00\x00\x00\x03\xe8\x00\xf0\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
Traceback (most recent call last):
File "server.py", line 97, in <module>
main()
File "server.py", line 95, in main
getSoundFromClient()
File "server.py", line 61, in getSoundFromClient
print("Deserialized received:",pickle.load(received))
TypeError: file must have 'read' and 'readline' attributes
答案 0 :(得分:0)
不知道你想要实现什么.Pickle主要用于序列化和反序列化Python对象结构。我们可以使用pickle.load()从目标文件(.obj)加载一个对象。所以在这里
print("Deserialized received:",pickle.load(received))
根本不是文件。 recvfrom()方法用于接收UDP消息。 如果您想知道如何序列化和反序列化对象,请查看here