如何将utf8字节数组解码为Python2中的字符串?

2024-06-01 04:54:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个表示utf-8编码字符串的字节数组。我想把这些字节解码成Pyton2中的字符串。我的整个程序依赖Python2,所以不能切换到Python3。

array = [67, 97, 102, **-61, -87**, 32, 70, 108, 111, 114, 97] 

->;咖啡馆

因为我想要的字符串中的每个字符不一定都由数组中的1个字节表示,所以我不能使用如下解决方案:

"".join(map(chr, array))

我试图创建一个函数来遍历数组,每当遇到不在0-127(ASCII)范围内的数字时,创建一个新的16位int,将当前位向左移动8位以上,然后使用逐位OR添加下一个字节。最后,它将使用unichr()对其进行解码。

result = []


for i in range(len(byte_array)):
    x = byte_array[i]
    if x < 0:
        b16 = x & 0xFFFF # 16 bit
        b16 = b16 << 8
        b16 = b16 | byte_array[i+1]
        result.append(unichr(m16))
    else:
        result.append(chr(x))

return "".join(result)

然而,这是不成功的。

下面的文章很好地解释了这个问题,并包含了一个nodeJS解决方案:

http://ixti.net/development/node.js/2011/10/26/get-utf-8-string-from-array-of-bytes-in-node-js.html


Tags: 字符串in字节数组resultbyte解决方案解码