python 解码部分 utf-8 字节数组

2024-04-30

我从不了解 UTF-8 规则的通道获取数据。因此,有时当 UTF-8 使用多个字节来编码一个字符并且我尝试将部分接收到的数据转换为文本时,我在转换过程中遇到错误。根据接口的性质(没有任何结束的流),我无法找出数据何时已满。因此我需要处理部分 utf-8 解码。基本上我需要解码我能解码的内容并存储部分数据。存储的部分数据将作为前缀添加到下一个数据。我的问题是 python 中是否有一些简洁的函数允许它?

[编辑] 只是为了向您保证我了解以下功能文档.python https://docs.python.org/3/library/stdtypes.html#bytes.decode

 bytes.decode(encoding="utf-8", errors="ignore")

但问题是它不会返回我错误在哪里,所以我不知道我应该保留多少字节。


您可以调用编解码器模块来救援。它直接为您提供了一个增量解码器,这正是您所需要的:

import codecs

dec = codecs.getincrementaldecoder('utf8')()

你可以喂它:dec.decode(input)结束后,可选择添加dec.decode(bytes(), True)强制它清理任何存储的状态。

测试变成:

>>> def test(arr):
    dec = codecs.getincrementaldecoder('utf8')()
    recvString = ""
    for i in range(len(arr)):
        recvString += dec.decode(arr[i:i+1])
        sys.stdout.write("%02d : %s\n" % (i, recvString))
    recvString += dec.decode(bytes(), True) # will choke on incomplete input...
    return recvString == arr.decode('utf8')

>>> testUtf8 = bytes([0x61, 0xc5, 0xbd, 0x6c, 0x75, 0xc5, 0xa5, 0x6f, 0x75, 0xc4, 0x8d, 0x6b, 0xc3, 0xbd, 0x20, 0x6b, 0xc5, 0xaf, 0xc5, 0x88])
>>> test(testUtf8)
00 : a
01 : a
02 : aŽ
03 : aŽl
04 : aŽlu
05 : aŽlu
06 : aŽluť
07 : aŽluťo
08 : aŽluťou
09 : aŽluťou
10 : aŽluťouč
11 : aŽluťoučk
12 : aŽluťoučk
13 : aŽluťoučký
14 : aŽluťoučký 
15 : aŽluťoučký k
16 : aŽluťoučký k
17 : aŽluťoučký ků
18 : aŽluťoučký ků
19 : aŽluťoučký kůň
True
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 解码部分 utf-8 字节数组 的相关文章

随机推荐

  • 在 Linq 中添加对 XML 文档的样式表引用?

    我创建了一个 XML 文档 并希望获得对 XSLT 文件的引用 到此 XML 生成 XElement xml new XElement ReportedOn from dl in EL DocumentLog ToList join o i
  • MVC 模型在 OnExecuted 操作过滤器中为 null ...或者设置模型的更优雅的方式?

    我有一个 ActionFilter 它覆盖了 OnActionExecuted 方法 在 POST 操作中 filterContext Controller ViewData Model 始终为 null 我确实发现下面的文章似乎在说它不应
  • OrderBy / ThenBy 循环 - C# 中的嵌套列表

    我有一个嵌套列表 List
  • 在集线器外部获取 SignalR 用户 (Hub.Context)

    有没有办法在集线器之外获取当前的 signalR 请求用户 我可以在集线器方法内部使用 Hub Context User 但是如果集线器方法调用任何其他底层 Wcf 服务调用 附加的BehaviorExtensionElement 用于添加
  • Java Web 启动和安全性

    刚刚有人向我指出 我的博客中的 Java Web Start 应用程序 例如我的按键绑定 http tips4java wordpress com 2008 10 10 key bindings 条目 由于以下安全错误而不再起作用 经过一些
  • 如何将 UTC 日期时间转换为另一个时区?

    我怎样才能转换这样的日期 2012 07 16 01 00 00 00 它在UTC 00 00时区 到UTC 04 00时区 确保正确处理夏令时 Use DateTime http php net manual en class datet
  • 检测 vb.net 中的浏览器关闭事件

    我的网页如下所示
  • 如何使用 Trie 进行拼写检查

    我有一个根据单词词典构建的特里树 我想用它来进行拼写检查 并建议字典中最接近的匹配项 也许对于给定数量的编辑x 我想我会在目标单词和字典中的单词之间使用 levenshtein 距离 但是有没有一种聪明的方法可以遍历 trie 而不需要对每
  • 找不到 R.layout.activity_main

    我试图使用一些在线教程来解决多种布局 问题是只要只有一个 XML 文件 我的程序就可以正确构建和编译 当我添加多个 XML 文件时 我收到错误消息 指出该行的 activity main 无法解析或不是字段 setContentView R
  • 无法从 GetProcessId(.. hWnd) (pInvoke) 中提取 processID

    我使用以下方法 DllImport kernel32 dll SetLastError true static extern int GetProcessId IntPtr hWnd 尝试获取正在运行的进程的 processId 我拥有的唯
  • 在应用商店上发布 PWA:google play 和 ios itunes

    有没有办法在应用商店上发布 PWA 来发布应用 谷歌播放和 iOS iTunes 不用用科尔多瓦制造一辆越野车 这会带来大量的维护问题 是的 有办法将您的 PAW 发布到 Android 应用商店 TWAs可信 Web 活动是一种使用基于自
  • MySQL - 选择字符串的前 10 个字节

    各位聪明的男士女士们 大家好 如何选择字符串的前 x 个字节 用例 我正在优化产品描述文本以上传到亚马逊 亚马逊按 utf8 中的字节 不是我之前所说的 latin1 而不是字符来测量字段长度 另一方面 MySQL 似乎是基于字符进行操作的
  • 两个 primefaces 日历组件验证

    我有一个表格JSF 2我使用双字段来指定日期范围 这样做的目的是不让用户选择第二个日期之前的第一个日期 所以我想在发送表单之前执行验证 使用p calendar成分 我所做的是将验证器绑定到第二个日历输入 以便在内部访问第一个组件并比较日期
  • 测试 powermock 模拟客户端调用的 http 服务器超时

    我需要为 connectTimeout 和 SocketTimeout 异常编写测试用例 我使用 powerMock 创建模拟对象 下面是我的代码 但是我的模拟对象出现空指针异常 任何帮助表示赞赏 package com util impo
  • 如何使用 JSON 和 Perl (HTML::Mason) 通过 AJAX 创建动态网页?

    我对处理 Javascript JSON 和 Peel 的方式感到有些困惑 而且大多数示例都是 PHP 语言 这对我没有帮助 我有一个页面 称为 main html 其中包含来自 MySQL 的数据 并且可以选择按 id 删除行 然后我让
  • 如何使用可滑动选项卡实现 PageTransformer

    在我的示例代码中 我在 MainActivity java 中有三个可滑动选项卡 即 Android IOS 和 WINDOWS 我使用滑动在选项卡之间切换 现在 我必须使用可滑动选项卡实现 PageTransformer 所以这里我需要您
  • Yii:如何用另一个模型数据填充选择输入?

    我正在玩一个小应用程序以学习使用 Yii 我创建了一个小型网络应用程序 其中包含 2 个模型 表 项目和任务 一对多关系 在模型类中正确配置 我现在尝试自定义任务 创建视图 用建议可用项目列表的选择框替换文本输入字段 我打开表单视图并尝试了
  • “分支”到底是什么意思?

    长话短说 据我所知 术语 分支 Git 术语 可能指的是相关但不同的事物 指向提交的非符号引用 指针 此类引用的名称 例如 master 存储库提交 DAG 的子图 由此类引用所指向的提交可到达的所有提交组成 然而 我发现这个术语显然指的是
  • 并发 log4j

    我有自己的日志引擎 它将日志写入带有阻塞队列的单独线程上 为了使用 标准软件 我正在考虑切换到 log4j 我不希望我的高并发软件因日志命令而变慢 这些日志命令在调用命令时将所有内容写入磁盘 log4j 可以用作垃圾箱吗 Log4j 是大多
  • python 解码部分 utf-8 字节数组

    我从不了解 UTF 8 规则的通道获取数据 因此 有时当 UTF 8 使用多个字节来编码一个字符并且我尝试将部分接收到的数据转换为文本时 我在转换过程中遇到错误 根据接口的性质 没有任何结束的流 我无法找出数据何时已满 因此我需要处理部分