gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:16:58 25 4
gpt4 key购买 nike

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

[编辑]只是为了确保您了解 docs.python 中的功能

 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

关于python解码部分utf-8字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40044517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com