如果 xmlcharrefreplace 和 backslashreplace 不起作用,我应该如何解码字节(使用 ASCII)而不丢失任何“垃圾”字节?

2024-02-28

我有一个网络资源,它返回给我的数据(根据规范)应该是 ASCII 编码的字符串。但在极少数情况下,我会收到垃圾数据。

例如返回一种资源b'\xd3PS-90AC'而另一个资源,对于相同的键返回b'PS-90AC'

第一个值包含非 ASCII 字符串。显然违反了规范,但不幸的是这超出了我的控制范围。我们没有人 100% 确定这真的是is应保留的垃圾或数据。

调用远程资源的应用程序将数据保存在本地数据库中以供日常使用。我可以简单地做一个data.decode('ascii', 'replace') or ..., 'ignore')但随后我会丢失稍后可能有用的数据。

我的第一反应是使用'xmlcharrefreplace' or 'backslashreplace'作为错误处理程序。很简单,因为它会产生一个可显示的字符串。但后来我收到以下错误:TypeError: don't know how to handle UnicodeDecodeError in error callback

唯一有效的错误处理程序是surrogateescape,但这似乎是用于文件名的。另一方面,对于my它会起作用的意图和目的。

Why are 'xmlcharrefreplace' and 'backslashreplace'不工作?我不明白这个错误。

For example,预期的执行将是:

>>> data = b'\xd3PS-90AC'
>>> new_data = data.decode('ascii', 'xmlcharrefreplace')
>>> print(repr(new_data))
'&#d3;PS-90AC'

这是一个做作的例子。我的目标是not lose任何数据。如果我会使用ignore or replace错误处理程序中,有问题的字节基本上会消失,并且信息会丢失。


为了完整起见,想从 python 3.5 开始添加这一点,backslashreplace适用于解码,因此您不再需要添加自定义错误处理程序。

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

如果 xmlcharrefreplace 和 backslashreplace 不起作用,我应该如何解码字节(使用 ASCII)而不丢失任何“垃圾”字节? 的相关文章

随机推荐

  • XML 解析错误:XML 或文本声明不在 php 中实体的开头

    您好 我正在 php 中生成 xml 文件 但出现错误 XML 解析错误 XML 或文本声明不在实体的开头 我的代码是
  • 某些设备在下班后收到 Gcm 通知

    我正在尝试使用 gcm 通知 我的服务器代码工作正常 并且我获得了成功作为确认 问题是通知发送正确 1 在大多数设备中 通知是立即收到的 在谷歌 Nexus 索尼手机上测试 2 其他设备也在几个小时后收到通知 是的 hours 在 Karb
  • Swift:IAP 更新交易未在 .Purchased 上调用

    我的代码有问题 updateTransactions 函数仅在交易进行时调用一次 交易完成后不再调用 func buyProduct product SKProduct let payment SKPayment product produ
  • Python PyQt - QTableWidget、JSON 和 emitSignal 导致空白单元格

    我将 PyQt 用于一个简单的应用程序 该应用程序从包含 JSON 格式字符串的日志文件中读取数据 并将它们很好地输出到表中 一切都按预期工作 除非我尝试从 加载 函数发出信号 该信号由主窗口拾取 位于一个设计为用新信息重新排列表的槽中 如
  • Lucene TermQuery 和 QueryParser

    我有 2 个 lucene 查询 1 Term term new Term Properties LUCENE APPARTMENT ADDRESS address Query termQuery new TermQuery term To
  • Flutter showDialog 未在 PopupMenuItem 点击上显示

    我在用着PopupMenuButton在我的应用程序中 我想要showDialog在点击一个PopupMenuItem My PopupMenuItem PopupMenuItem child Text Show dialog onTap
  • setState 方法导致 Reactjs 函数中的结果无限循环

    该代码显示数组中的用户记录 我还创建了一个updateCount 功能对内容显示的用户进行计数 我可以看到计数结果alerted并在控制台中 现在我想显示计数结果 为此 我初始化setState 内的方法updateCount功能 upda
  • PHP 和 Java 中的 SHA256

    我正在将一些 Java 代码移植到 PHP 代码 在Java中我有一个哈希SHA256代码如下 public static String hashSHA256 String input throws NoSuchAlgorithmExcep
  • 从 Action 指令创建 DynamicMethod

    我正在使用 DynamicMethod 并旨在执行以下操作 我有一个 Action 从中可以使用字节形式获取 IL 代码GetILAsByteArray 从这个字节我想创建一个动态方法并执行 这是我正在尝试做的事情的一个例子 class P
  • 在 Windows 10 上使用 nuwen MinGW 的 C++17 文件系统

    我想尝试 C 17 中的新文件系统库 因此尝试复制来自 cppreference com 的 std filesystem current path 示例 https en cppreference com w cpp filesystem
  • PDO 语句会自动转义吗?

    PHP PDO 语句是自动转义的 还是仅准备好的语句 例如 假设 username and password是用户输入 以下代码是否安全 或者是否容易受到注入 dbh new PDO mysql host localhost dbname
  • 在 std::wstring 中查找方法

    我已声明Wstring如下 wstring strID 当我尝试查找出现的子字符串时 如下所示 int index strID find LABS 我收到如下错误 error C2664 unsigned int std basic str
  • 如何在 python 中使用可变宽度高斯函数执行卷积?

    我需要使用高斯执行卷积 但是高斯的宽度需要改变 我不进行传统的信号处理 而是需要根据设备的分辨率获取完美的概率密度函数 PDF 并 涂抹 它 例如 假设我的 PDF 一开始是尖峰 增量函数 我将其建模为非常窄的高斯 经过我的设备运行后 它将
  • Spring中如何只实现CrudRepository的特定方法?

    我在用着CrudRepositoryspring data jpa 只定义一个实体的接口 然后拥有所有标准的 CRUD 方法 而无需显式提供实现 例如 public interface UserRepo extends CrudReposi
  • 批量插入问题

    我在客户端有一个 CSV 文件 我想开发一个 C 应用程序来将数据批量插入到数据库的表中 以尽量减少日志输出 我对是否在客户端使用 ADO NET 调用数据库服务器中的存储过程感到困惑 什么样的代码需要在客户端开发 什么样的代码需要在服务器
  • 如何在快速路线中调用不同的 REST API?

    我有一个使用多种路由创建的express js REST API 我想创建一个路由来调用另一个 REST API 然后返回结果 理想情况下 它应该类似于以下内容 router post CreateTicket cors corsOptio
  • UIImagePickerController - 相机未准备好

    我正在开发一个录制视频的 iPhone 应用程序 我创建一个 UIImagePickerController 将其限制为视频录制 然后以编程方式要求相机启动VideoCapture 不幸的是 当我运行该应用程序时 我在控制台中看到以下内容
  • 为什么我无法使用 python 建立与rabbitMQ的连接?

    我正在学习如何使用rabbitMQ 我正在 MacBook 上运行rabbit MQ 服务器并尝试与 python 客户端连接 我按照安装说明进行操作here http www rabbitmq com install homebrew h
  • DynamoDB - 新放入的项目未反映在扫描中

    我在 DynamoDB 扫描方面遇到问题 我使用以下命令将新项目添加到表中putItem method AmazonClientManager ddb putItem request 但是 当我尝试使用扫描方法进行扫描时 该项目不会出现在结
  • 如果 xmlcharrefreplace 和 backslashreplace 不起作用,我应该如何解码字节(使用 ASCII)而不丢失任何“垃圾”字节?

    我有一个网络资源 它返回给我的数据 根据规范 应该是 ASCII 编码的字符串 但在极少数情况下 我会收到垃圾数据 例如返回一种资源b xd3PS 90AC 而另一个资源 对于相同的键返回b PS 90AC 第一个值包含非 ASCII 字符