是否有与 b'' 字节文字等效的函数?

问题描述 投票:0回答:1

我正在处理一个包含数据行的文本文件,其中包括 ASCII 和转义字节数据,并且我试图在 Python 中找到一个函数,将文本行编码为字节数据,以便通过 UDP 发送到另一台 PC。

我尝试编码的字符串是捕获的 OSC 数据,看起来类似于此行:

#bundle\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x008/tracking/trackers/head/position\x00\x00\x00\x00,fff\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xb8\x93\xbd\x80\x00\x00\x00\x00\x00\x004/tracking/trackers/6/position\x00\x00\x00,fff\x00\x00\x00\x00\x00\x00\x00\x00\xbe\xdb\xe9\x9e\x80\x00\x00\x00\x00\x00\x004/tracking/trackers/6/rotation\x00\x00\x00,fff\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x004/tracking/trackers/1/position\x00\x00\x00,fff\x00\x00\x00\x00\x00\x00\x00\x00\xbfAO\x80\x80\x00\x00\x00\x00\x00\x004/tracking/trackers/1/rotation\x00\x00\x00,fff\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x004/tracking/trackers/4/position\x00\x00\x00,fff\x00\x00\x00\x00<]\x01P\xbfF[\x9d>\xa2\xaa\xf2\x00\x00\x004/tracking/trackers/4/rotation\x00\x00\x00,fff\x00\x00\x00\x00\xc2\xad\xe3\x91A\xbc\xd2\xec@\xff)\xcb\x00\x00\x004/tracking/trackers/5/position\x00\x00\x00,fff\x00\x00\x00\x00>:=\xcd\xbf\x90vV\x80\x00\x00\x00\x00\x00\x004/tracking/trackers/5/rotation\x00\x00\x00,fff\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x004/tracking/trackers/2/position\x00\x00\x00,fff\x00\x00\x00\x00<]\x01L\xbf\xa2\x93Y>\xa2\xaa\xf2\x00\x00\x004/tracking/trackers/2/rotation\x00\x00\x00,fff\x00\x00\x00\x00\x00\x00\x00\x00A\xf9Op\x00\x00\x00\x00\x00\x00\x004/tracking/trackers/3/position\x00\x00\x00,fff\x00\x00\x00\x00>\xb28^\xbf\x92\xc6L>\xea\x81o\x00\x00\x004/tracking/trackers/3/rotation\x00\x00\x00,fff\x00\x00\x00\x00BJ\xd5.B\xfd\xb4(C#\xcf`'

但是当我尝试将字符串编码为字节时,Python 在字节对象中包含新的双反斜杠:

b1 = b'tracking/trackers/head/position\x00\x00\x00\x00'
b2 = r"tracking/trackers/head/position\x00\x00\x00\x00".encode()

print(b1)
print(b2)

b'tracking/trackers/head/position\x00\x00\x00\x00'
b'tracking/trackers/head/position\\x00\\x00\\x00\\x00' #added double backslashes

如何解析或编码字符串以生成与 Python 3 中的字节文字等效的内容?

python encoding byte
1个回答
0
投票

您需要拥有正确的字节才能正确编码回来。

请参阅以下示例:

b1 = b'tracking/trackers/head/position\x00\x00\x00\x00'
print(b1)
print(b1.decode())
print(b1.decode().encode())
b'tracking/trackers/head/position\x00\x00\x00\x00'
tracking/trackers/head/position
b'tracking/trackers/head/position\x00\x00\x00\x00'

要解释为什么这样做,我建议阅读这个答案:“u”和“r”字符串前缀到底做什么,以及什么是原始字符串文字?

值得注意的是:

“原始字符串文字”与字符串文字的语法略有不同,其中反斜杠 , 被视为“只是一个反斜杠”(除非它出现在引号之前,否则会终止文字)--没有“转义序列”来表示换行符、制表符、退格键、换页符等。在普通字符串文字中,每个反斜杠必须加倍以避免被视为转义序列的开头。

你使用

r'stringhere'
的地方会弄乱反斜杠。

© www.soinside.com 2019 - 2024. All rights reserved.