python-3.x - 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 结构导入?
解决方案
推荐阅读
- bash - Shell 脚本 - 退出 spark-shell 会话
- javascript - 如何按从 dom 开始的属性名称删除 iframe?
- sas - sas:如何为多个变量设置 if-then 语句
- c++ - 使用 OpenSSL API 比较两个公钥
- jquery - jQuery .each 只找到第一个值
- javascript - 如何使用 Javascript 测量图像中某种颜色的百分比量?
- python - SMTPAuthenticationError: (535, 'Authentication failed: account disabled') Python app
- java - Java中共享静态变量的两个类
- python - '\n' 被添加到字典中每一行的末尾
- php - 如何使用 DOMparser/Xpath 在 div 下抓取 DL 的 DT 和 DD