如何将bytestring的Python字符串表示转换为实际的bytestring?

2024-10-01 07:30:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图弄清楚如何将字节字符串的字符串表示形式转换为实际的字节字符串类型。我不太习惯Python(只是用它来帮助朋友),所以我不确定是否有一些简单的“casting”方法(比如我心爱的Java;)。基本上我有一个文本文件,它的内容是一个字节字符串:

b'\x03\xacgB\x16\xf3\xe1\\v\x1e\xe1\xa5\xe2U\xf0g\x956#\xc8\xb3\x88\xb4E\x9e\x13\xf9x\xd7\xc8F\xf4'

我目前在这个文件中读到如下:

^{pr2}$

如何使x成为<class 'bytes'>类型?谢谢你的帮助。在

编辑:在阅读了下面的一个回复之后,我想我可能对这个问题限制得太多了。对此我深表歉意。输入字符串不必是python字节字符串格式(即,使用b和引号),它可以是纯字节字符串:

\x03\xacgB\x16\xf3\xe1\\v\x1e\xe1\xa5\xe2U\xf0g\x956#\xc8\xb3\x88\xb4E\x9e\x13\xf9x\xd7\xc8F\xf4

如果这能使它更容易或是更好的实践,我可以使用这个。在


Tags: 字符串类型字节x03xa5xe1xc8x16
2条回答
>>> r'\x03\xacgB\x16\xf3\xe1\\v\x1e\xe1\xa5\xe2U\xf0g\x956#\xc8\xb3\x88\xb4E\x9e\x13\xf9x\xd7\xc8F\xf4'.decode('string-escape')
'\x03\xacgB\x16\xf3\xe1\\v\x1e\xe1\xa5\xe2U\xf0g\x956#\xc8\xb3\x88\xb4E\x9e\x13\xf9x\xd7\xc8F\xf4'

这对于周围没有b'...'的字符串有效。否则,建议您使用ast.literal_eval()。在

由于您的输入是使用Python的语法,因此出于某种原因(*),所以这里要做的就是调用eval

>>> r"b'\x12\x12'"
"b'\\x12\\x12'"
>>> eval(r"b'\x12\x12'")
'\x12\x12'

但是要小心,因为这可能是一个安全问题。eval将运行任何代码,因此您可能需要清理输入。在您的例子中,它很简单-只需检查您正在eval-ing的内容是否确实是您期望的格式的字符串。如果安全问题不是这里的问题,就不用麻烦了。在

重编您的编辑:不过,eval是这里最简单的方法(如果没有b'',则添加b'')。当然,您也可以通过将每个\xXX转换为其实际值来手动执行此操作。在


(*)为什么,真的?对于数据表示格式,这似乎是一个奇怪的选择

相关问题 更多 >