python3 二进制转中文

 狠毒的水瓶_617_223_489_321 发布于 2022-10-31 07:54

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

>>> 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')
3 个回答
  • 这是二进制么?

    2022-10-31 22:27 回答
  • 你的二进制不对啊。。如下:

    >>> name = '你好'
    >>> name
    '你好'
    >>> name.encode()
    b'\xe4\xbd\xa0\xe5\xa5\xbd'
    >>> bname = name.encode()
    >>> bname
    b'\xe4\xbd\xa0\xe5\xa5\xbd'
    >>> bname.decode()
    '你好'
    >>> 
    
    
    2022-10-31 22:27 回答
  • 大多数汉字的utf8二进制形态都是三个字节。参照维基百科对utf8编码的描述,将第一个字节的二进制数的前四位掐掉,第二字节的前两位,自己第三字节的前两位掐掉,剩余部分拼起来(总共16位的二进制数值)就是该UTF-8汉字的实际unicode值。转成16进制打印出来就能验证效果了。我曾经亲自实验过。

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

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

    2022-10-31 22:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有