如何解码包含无效字节的字节对象,Python3

2024-04-04

在python2中,我可以整天生成以字符串格式表示的这些十六进制字节'\x00\xaa\xff'

>>>’00'.decode('hex') + 'aa'.decode('hex') + 'ff'.decode('hex')
>>>'\x00\xaa\xff'

同样,我可以在 python3 中执行此操作

>>> bytes.fromhex(’00’) + bytes.fromhex(‘aa’) + bytes.fromhex(‘ff’)
>>>b'\x00\xaa\xff'

根据py2->py3的变化here https://docs.python.org/release/3.0.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit

Python 3.0 使用文本和(二进制)数据的概念,而不是 Unicode 字符串和 8 位字符串。 所有文本均为 Unicode;然而,编码的 Unicode 表示为二进制数据。

因此,Py2 版本的输出是字符串,而 Py3 版本的输出是字节类型的二进制数据

但我真的需要一个字符串版本!

根据上述文档:

由于 str 和 bytes 类型不能混合,因此您必须始终在它们之间显式转换。使用 str.encode() 从 str 转换为字节,使用 bytes.decode() 从字节转换为 str。您还可以分别使用bytes(s,encoding=...)和str(b,encoding=...)。

好吧,现在我必须解码这个字节类型的二进制数据......

>>> b'\x00\xaa\xff'.decode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xaa in position 1: invalid start byte

哎呀!我在这里不关心 UTF-8 编码。

我可以得到一个虚拟的直通编解码器吗?

PS

为什么我需要'\x00\xaa\xff'代替b'\x00\xaa\xff' ?

因为我正在把这个字符串传递给

a crc function https://github.com/gtrafimenkov/pycrc16/blob/master/python2x/crc16/crc16pure.py用纯Python编写

crc16pure.crc16xmodem('\x00\xaa\xff')

该函数期望迭代由字节组成的字符串。 如果我给出这个函数b'\x00\xaa\xff'那么这只是一个不能迭代的数字。


问题:我可以获得一个虚拟的直通编解码器吗?

答案:是的,使用iso-8859-1

在python3中,以下内容不起作用

b'\x00\xaa\xff'.decode()

默认编解码器“utf-8”无法解码字节 0xaa

只要您不关心字符集(例如,当您print())并且只想要一个 8 位字符的字符串,就像在 python2 中得到的那样,然后使用 8 位编解码器ISO-8859-1 https://en.wikipedia.org/wiki/ISO/IEC_8859-1

b'\x00\xaa\xff'.decode('iso-8859-1')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解码包含无效字节的字节对象,Python3 的相关文章

随机推荐

  • 如何计算两个时间字符串之间的时间间隔

    我有两个时间 一个开始时间和一个停止时间 格式为 10 33 26 HH MM SS 我需要两个时间之间的差异 我一直在浏览 Python 文档并在线搜索 我想它可能与日期时间和 或时间模块有关 我无法让它正常工作 并且只在涉及约会时寻找如
  • 在 do...while 中将相关表达式匹配设置为 false

    我正在尝试编写一些非常基本的代码 但我也在正则表达式上挑战自己 我已经能够将代码搞乱到一定程度 但我真正遇到的问题是我试图在表达式为 false 时运行 do while 循环 此时我完全没有收到任何错误 但 do while 循环继续运行
  • 线程冻结主 UI

    Hello我目前正在编写一个服务器监控应用程序 Classes public class Server public string SERVERNAME public string ENVIRONMENT public string VER
  • java.lang.ClassNotFoundException: org.springframework.orm.hibernate4.LocalSessionFactoryBean

    我是 Spring 新手 这是我的第一个示例 JSF 2 PrimeFaces 3 Spring 和 Hibernate 集成 这是pom xml
  • 如何将数组(即列表)列转换为向量

    问题的简短版本 考虑以下代码片段 假设spark已经设置为一些SparkSession from pyspark sql import Row source data Row city Chicago temperatures 1 0 2
  • MATLAB 错误:“以前似乎被用作函数或命令”

    我想创建一个名为 E7stats 的函数 它对 csv 文件中包含的第一个期中考试的分数执行简单的统计分析 该函数接受一个字符串输入 filename csv 文件的名称 并返回一个输出 一个 1 2 结构体数组 S 其两个条目都包含四个字
  • PHP include 导致页面顶部出现空白

    我正在制作的网站遇到问题 我的页面顶部有一行空白 我不知道它是从哪里来的 这可能是因为 php 在我的页面中出现了额外的换行符include 或者可能只是一些有问题的CSS 我得到了它 我必须承认 这是一件非常奇怪的事情 This http
  • 如何总结水晶报表中的公式字段?

    如何在水晶报表中的公式字段上添加运行总计或汇总字段 Sample Report Serial No Premium Commission Net Premium Commission 1 10 4 6 2 40 30 10
  • 解决方案资源管理器中的 Visual Studio 心形叠加。这是什么意思?

    在解决方案资源管理器中 您有时会在类定义节点中看到心形覆盖 它意味着什么 我相信您指的是信号图标 当类型 成员是内部 C 或朋友 VB NET 时 心形会显示在类型 成员上 图标的含义是记录在 Microsoft 文档中 https lea
  • Openpyxl如何通过索引从工作表中获取行

    使用 Openpyxl 和 python3 5 我尝试使用下标从 Excel 工作表中获取第一行 但出现错误 after getting filename after loading worksheet to get the first r
  • C# NotifyIcon ShowBalloonTip 超时

    在我的 C 2 0 框架 应用程序中 我使用通知图标控件 我想从此控件中显示气球提示 但是 showBalloonTip 事件我限制为超时 我想永远显示这个气球 我尝试使用一个计时器来一次又一次地显示气球 但在 vista 中 气球有淡入淡
  • mb_convert_case 未定义函数(Symfony2 FOS/UserBundle)

    在我的 Symfony2 应用程序上 我收到错误 致命错误 在第 18 行 Applications MAMP htdocs application vendor bundles FOS UserBundle Util Canonicali
  • 对JPanel函数的关注:paintComponent()

    你好 我是java编程新手 我需要有人向我解释这些代码行 public class drawpanel extends JPanel public void paintComponent Graphics g super paintComp
  • zend 模型架构

    假设我的数据库中有两个表 项目和用户 我创建了两个扩展 Zend Db Table Abstract 的模型 Model DbTable Users and Model DbTable Projects 现在 创建一个实例是一个好的模式吗
  • 如何向 WordPress 添加简单的 jQuery 脚本?

    我阅读了 Codex 和一些关于在 WordPress 中使用 jQuery 的博客文章 这非常令人沮丧 我已经加载了 jQueryfunctions php文件 但所有的指南都很糟糕 因为他们假设你已经有大量的 WordPress 经验
  • 如何在 gradle 中获取当前选择的构建变体?

    我正在使用带有 gradle 2 2 的 Android Studio RC 我的构建变体部分中有一些变体 我可以选择我想要构建的变体 例如 为匈牙利或德国构建的一个 我在 gradle 脚本中启动了一些任务 例如根据风味 变体更改名称 但
  • Backbone.js 中的分页

    我知道有一个组件可以实现此目的 但根据我所看到的 您必须创建一个扩展组件的新集合 还有另一种方法可以在主干中进行分页吗 我所需要的只是一个上一个和下一个按钮 将每页的项目限制为 12 个 我一直在 javascript 上创建它 对于生产环
  • 尝试在 slack 上为 laravel-botman 启用事件订阅时,如何响应正确的质询值

    这不是我之前的问题的重复here https stackoverflow com questions 52850571 connecting slack to botman in laravel on localhost 我正在使用botm
  • 未找到图像或类型未知 Dompdf 0.8.1 和 CodeIgniter

    我想从生成的图像将图像加载到 PDF 我已经设置了isRemoteEnabled 为 true和 生成的 QRCode 工作正常 这是我的代码 this gt load gt library array pdf ciqrcode data
  • 如何解码包含无效字节的字节对象,Python3

    在python2中 我可以整天生成以字符串格式表示的这些十六进制字节 x00 xaa xff gt gt gt 00 decode hex aa decode hex ff decode hex gt gt gt x00 xaa xff 同