我正在将项目代码从Python 2迁移到Python 3。 一段代码是使用struct.pack,它为我提供了string(Python2)和byte字符串(Python3)的值 我想将python3中的字节字符串转换为普通字符串。转换后的字符串应具有相同的内容,以使其与现有值一致。 例如。
in_val = b'\0x01\0x36\0xff\0x27' # Input value
out_val = '\0x01\0x36\0xff\0x27' # Output should be this
我有一种解决方案,可以将in_val转换为字符串,然后显式删除将其转换为字符串后出现的'b'和'\'字符。
是否有其他解决方案可以使用干净的方式进行转换。 任何帮助表示赞赏
答案 0 :(得分:0)
str
值始终是 Unicode代码点。前256个值是 Latin-1 范围,因此您可以使用该编解码器将字节直接解码为这些代码点:
out_val = in_val.decode('latin1')
但是,您想重新评估为什么要这样做。不要将二进制数据存储在字符串中,几乎总是有更好的方法来处理二进制数据。例如,如果要将二进制数据存储在JSON中,则需要使用Base64或其他一些二进制到文本编码方案,这些方案可以更好地处理边缘情况,例如当解释为文本时包含转义码的二进制数据。>