有没有办法在 Python 中对字符串对象内的字节进行解码?

问题描述

让我说得更清楚。

我在 Python 中收到一个 string,如下所示:

file = "b'x\\x9c\\xb4'"

file 的类型是 str。但是您可以在该字符串中看到 <class 'bytes'> 的格式。这是在 str(file) 已经编码后调用 file 的结果。我想解码它,但我不知道如何解码字符串对象内部的字节。

我的问题是:有没有一种方法可以将 file 解释为 bytes 而不是 str 而不必调用 bytes(file,'utf-8')file.encode('utf-8') 之类的东西?这些方法的问题是我会像我之前所说的那样对已经编码的字节进行编码。

我为什么需要那个?

我正在构建一个 API,我需要将一个非常大的字符串作为 JSON 值发回。由于我有足够的空间来压缩它,所以我最终使用了 zlib:

import zlib
file = BIG_STRING
file_compressed = zlib.compress(BIG_STRING.encode(utf-8)) # Since zlib expects a bytes object
send_back({"SOME_BIG_STRING": str(file_compressed)})

我将它作为字符串发送回来,因为我无法将它作为字节对象发送回来,它不支持。如果我尝试在发送之前对其进行解码压缩,我最终会遇到错误

send_back({"SOME_BIG_STRING": file_compressed.decode('utf-8')})
-> UnicodeDecodeError: utf-8' codec can't decode byte 0x9c in position 1: invalid start byte

当我稍后在程序中收到相同的字符串时,我发现自己陷入了最初描述的问题。

我现在缺乏能够做一些解决方法的知识,无法找到答案。如果有人能帮助我,我将不胜感激!

解决方法

无论如何,如果找不到任何其他解决方案,您可以调用 eval("b'x\\x9c\\xb4'") 并获得结果 b'x\x9c\xb4'。但在常见情况下不建议使用 eval,这将是一种不好的做法。