有没有办法解码 Python 中字符串对象中的字节?
Is there a way to decode bytes inside a string object in Python?
让我说得更清楚。
我在 Python 中收到了这样的 string
:
file = "b'x\x9c\xb4'"
file
的类型是str
。但是您可以在该字符串内部看到 <class 'bytes'>
的格式。这是在 file
已经编码后调用 str(file)
的结果。我想解码它,但我不知道如何解码字符串对象中的字节。
我的问题是:有没有一种方法可以将 file
解释为 bytes
而不是 str
而不必调用 bytes(file, 'utf-8')
或 file.encode('utf-8')
之类的东西?这些方法的问题是我会像我之前所说的那样对已经编码的字节进行编码。
为什么我需要它?
我正在构建一个 API,我需要作为 JSON 值发回一个非常大的字符串。因为有很多 space 供我压缩,所以我结束了使用 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
不建议在常见情况下使用,这将是一种不好的做法。
让我说得更清楚。
我在 Python 中收到了这样的 string
:
file = "b'x\x9c\xb4'"
file
的类型是str
。但是您可以在该字符串内部看到 <class 'bytes'>
的格式。这是在 file
已经编码后调用 str(file)
的结果。我想解码它,但我不知道如何解码字符串对象中的字节。
我的问题是:有没有一种方法可以将 file
解释为 bytes
而不是 str
而不必调用 bytes(file, 'utf-8')
或 file.encode('utf-8')
之类的东西?这些方法的问题是我会像我之前所说的那样对已经编码的字节进行编码。
为什么我需要它?
我正在构建一个 API,我需要作为 JSON 值发回一个非常大的字符串。因为有很多 space 供我压缩,所以我结束了使用 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
不建议在常见情况下使用,这将是一种不好的做法。