首页 > 解决方案 > Python3解码十六进制数高于\x7f的二进制字符串

问题描述

我尝试将一些 bmv2 thrift python2 代码移植到 python3 并遇到以下问题:

蟒蛇2:

import struct
def demo(byte_list):
   f = 'B' * len(byte_list)
   r = struct.pack(f, *byte_list)
   return r
demo([255, 255])
"\xff\xff"

移植到 python3 它返回一个二进制字符串b"\xff\xff"因为结构模块发生了变化。如果我尝试通过r.decode()进行解码,则会引发异常,因为\xff保留在 unicode 表中。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

最简单的解决方案是自己连接字符串。我尝试使用像“\x01”这样的自制字符串,它可以工作,如果我尝试“\xff”,它不适用于节俭。我认为因为"\xff"在 unicode 中是"ÿ",而节俭服务器需要"\xff"。我尝试了不同的编码和原始字符串。

TL;DR:有没有办法在 python3 中解码包含 \xff 或通常高于 \x7f(即 ord 127)的二进制字符串?b"\xff" => "x\ff"或者使用旧的 python2 结构导入?

标签: python-3.xstringbinarythrift

解决方案


推荐阅读