python3 二进制转中文

查看:495
本文介绍了python3 二进制转中文的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

关于二进制转中文的问题。

>>> name = '你好'
>>> name
'你好'
>>> bytes(name,'unicode_escape')
b'\\u4f60\\u597d'

现在我有一段二进制数据,想要转化成中文。

bytes_name = b'\x60\x4f\x7d\x59'

我尝试使用 bytes_name.decode('unicode_escape')去转化,得到结果'O}Y'`,
我应该怎样做才可以得到正确的结果你好
谢谢!

===========================================================================
谢谢大家,我已找到答案。
那个二进制数据bytes_name = b'\x60\x4f\x7d\x59'是用c语言写的另一个程序传送过来的数据。

根据大家的提示,我将b'\x60\x4f\x7d\x59'转化成b'\\u4f60\\u597d',然后再decode('unicode_escape')即可。

def parse_unicodestring(unicode_bytes,length):
    result_bytes = b''
    for i in range(0,length,2):
        a = hex(unicode_bytes[i])[2:].encode('unicode_escape') if len(hex(unicode_bytes[i])) == 4 else ('0'+hex(unicode_bytes[i])[2:]).encode('unicode_escape')
        b = hex(unicode_bytes[i+1])[2:].encode('unicode_escape') if len(hex(unicode_bytes[i+1])) == 4 else ('0'+hex(unicode_bytes[i+1])[2:]).encode('unicode_escape')
        result_bytes += b'\u'+b+a

    return result_bytes.decode('unicode_escape')

解决方案

大多数汉字的utf8二进制形态都是三个字节。参照维基百科对utf8编码的描述,将第一个字节的二进制数的前四位掐掉,第二字节的前两位,自己第三字节的前两位掐掉,剩余部分拼起来(总共16位的二进制数值)就是该UTF-8汉字的实际unicode值。转成16进制打印出来就能验证效果了。我曾经亲自实验过。

参考信息 https://en.m.wikipedia.org/wiki/UTF-8

第一次答题。话说我用户名是guoshim,手机端回答。为什么显示为一个叫做murphywuwu的答案?数据串了吗?奇怪了。

这篇关于python3 二进制转中文的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆