如何在python中将字节转换为字符

时间:2019-12-13 13:55:55

标签: python unicode hex

我有一个字节类型的数据,像这样:

b"6D4B8BD5"

数据来自使用unicode-escape码的汉字。 它可以这样生成:

'测试'.encode('unicode-escape')

结果:

b'\\u6d4b\\u8bd5'

如何将b“ 6D4B8BD5”转换为b'\ u6d4b \ u8bd5'或 如何将b“ 6D4B8BD5”转换为“测试”?

3 个答案:

答案 0 :(得分:1)

unhexlify是获取字节,然后使用正确的编码进行解码的功能:

>>> from binascii import unhexlify
>>> s = b'6D4B8BD5'
>>> unhexlify(s).decode('utf-16be')
'测试'

答案 1 :(得分:0)

>>> str = b"6D4B8BD5"
>>> chr(int(str[0:4], 16))
'测'
>>> chr(int(str[4:8], 16))
'试'

答案 2 :(得分:0)

返回正确结果并适用于任何字符串的工作解决方案:)

  

Python 3.x

def convert(chars):
    if isinstance(chars, bytes):
        chars = chars.decode('ascii')

    chars = [''.join(c) for c in zip(chars[::4], chars[1::4], chars[2::4], chars[3::4])]

    return "".join([chr(int(c, 16)) for c in chars])


print(convert(b"6D4B8BD5"))


+++++++

#> python test123.py
测试

无需使用列表等的第二种解决方案。更轻松,更快捷。

def convert(chars):
    if isinstance(chars, bytes):
        chars = chars.decode('ascii')

    result = ''
    for i in range(len(chars) // 4):
        result += chr(int(chars[4 * i:4 * (i + 1)], 16))

    return result


print(convert(b"6D4B8BD5"))
++++++++

#> python test123.py
测试
相关问题