序列化对象字节字符串为常规字符串

时间:2015-04-13 16:02:52

标签: python string udp

我需要将序列化对象(我使用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

1 个答案:

答案 0 :(得分:0)

不知道你想要实现什么.Pickle主要用于序列化和反序列化Python对象结构。我们可以使用pickle.load()从目标文件(.obj)加载一个对象。所以在这里

print("Deserialized received:",pickle.load(received))

根本不是文件。 recvfrom()方法用于接收UDP消息。 如果您想知道如何序列化和反序列化对象,请查看here