我是python 3的新手,它试图从包含消息中字符串和字节的字节数组中提取消息。
我无法从解码的字节数组中提取字节消息。
我尝试使用bytes(v) for v in rest.split()
函数尝试获取bytes数组,然后对其进行解码,但无法。
# The message chunk:
chunk = b"1568077849\n522\nb'l5:d4:auth53:\xc3\x99\xc3\xac\x1fH\xc2\xa3ei6eli1eee'\n"
# I split the chunk into sub categories for further processing:
_, size, rest = (chunk.decode("utf-8")).split('\n', 2)
# _ contains "1568077849"
# size contains "522"
# rest contains "b'l5:d4:auth53:\xc3\x99\xc3\xac\x1fH\xc2\xa3ei6eli1eee'"
我应该能够解码rest变量(rest.decode(“ utf-8”)),但是由于它已经以字符串形式存储,所以我很难弄清楚如何转换它到字节,然后将值解码。
预期结果:l5:d4:auth53:ÙìH£ei6eli1eee
答案 0 :(得分:1)
这将打印您的最终结果:
chunk = b"1568077849\n522\nb'l5:d4:auth53:\xc3\x99\xc3\xac\x1fH\xc2\xa3ei6eli1eee'\n"
l1 = chunk.decode('utf-8').split()[2:] # Initial decode
# slice out the embedded byte string "b' '" characters
l1_string = ''.join([x[:-2] if x[0] != 'b' else x[2:] for x in l1])
l1_bytes = l1_string.encode('utf-8')
l1_final = l1_bytes.decode('utf-8')
print('Results')
print(f'l1_string is {l1_string}')
print(f'l1_bytes is {l1_bytes}')
print(f'l1_final is {l1_final}')
Results
l1_string is l5:d4:auth53:ÙìH£ei6eli1ee
l1_bytes is b'l5:d4:auth53:\xc3\x99\xc3\xacH\xc2\xa3ei6eli1ee'
l1_final is l5:d4:auth53:ÙìH£ei6eli1ee
答案 1 :(得分:0)
我能够通过这种方式获得预期的输出:
_, size, rest = (chunk.decode("utf-8")).split('\n', 2)
rest = bytes(rest.replace("b'", "").replace("'", ""), "utf-8").decode("unicode_escape")
从这篇文章中得到了线索: Process escape sequences in a string in Python