Python 3.x Python3解码十六进制数大于\x7f的二进制字符串

Python 3.x Python3解码十六进制数大于\x7f的二进制字符串,python-3.x,string,binary,thrift,Python 3.x,String,Binary,Thrift,我尝试将一些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.decod

我尝试将一些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格式的“ÿ”,而thrift服务器需要“\xff”。 我尝试了不同的编码和原始字符串


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

问题在于“\xff\xff”实际上不是字符串:它是表示二进制对象的字节序列。Python2没有区分这两者,但Python3区分了这两者。您使用输出的目的是什么,您不能只使用bytes对象吗?输出被传递到thrift模块,该模块需要一个“正常”字符串。显然,如果我传递二进制字符串,我会在“python3.5/site packages/thrift/compat.py”(不带字符串参数的编码)处得到一个异常,这看起来像是一个大的thrift(可能)。你使用的是最新版本吗?谢谢你的建议,我已经从0.11升级到了0.12,但不幸的是没有任何变化。真遗憾。希望其他人能够解决这个问题!问题在于“\xff\xff”实际上不是一个字符串:它是一个表示二进制对象的字节序列。Python2没有区分这两者,但Python3区分了这两者。您使用输出的目的是什么,您不能只使用bytes对象吗?输出被传递到thrift模块,该模块需要一个“正常”字符串。显然,如果我传递二进制字符串,我会在“python3.5/site packages/thrift/compat.py”(不带字符串参数的编码)处得到一个异常,这看起来像是一个大的thrift(可能)。你使用的是最新版本吗?谢谢你的建议,我已经从0.11升级到了0.12,但不幸的是没有任何变化。真遗憾。希望其他人能够解决这个问题!