python 16进制转中文

项目场景:

我们在用python分析流量时常常会需要对获取到的16进制报文进行中文翻译。

以下是我在学习过程中遇到的问题,记录学习,供参考。

字节:

       字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符,一个字节存储8位无符号数,储存的数值范围为0-255。如同字元一样,字节型态的变数只需要用一个位元组(8位元)的内存空间储存。

字符字节:

        字节ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文 汉字占两个字节的空间。一个 二进制数字序列,在 计算机中作为一个数字单元,一般为8位二进制数,换算为 十进制。最小值0,最大值255。如一个ASCII码就是一个字节。

UTF-8编码:一个英文 字符等于一个字节,一个中文(含繁体)等于三个字节。

Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。

符号:英文 标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。


问题描述

网给出得解决的方案大多数是:

a = 'i am request,\xE6\x88\x91\xE6\x98\xAF\xE8\xAF\xB7\xE6\xB1\x82'.decode('utf-8').encode('utf-8')

print(a)

结果:

 


原因分析:

s.decode()方法中 s必须为 bites 类型    

思路:

二进制转换

binascii.b2a_hex(data)和binascii.hexlify(data):返回二进制数据的十六进制表示。每个字节被转换成相应的2位十六进制表示形式。因此,得到的字符串是是原数据长度的两倍。

binascii.a2b_hex(hexstr) 和binascii.unhexlify(hexstr):从十六进制字符串hexstr返回二进制数据。是b2a_hex的逆向操作。 hexstr必须包含偶数个十六进制数字(可以是大写或小写),否则报TypeError。


解决方案:

  • 对于带有'\x'的采用  s.decode()方法即可
a=b"\xe4\xbd\xa0\xe5\xa5\xbd"  #字符串前加 b   str即可变为bites   
print(a.decode())

结果:

  • 不带'\x',调用 binascii 模块,将"e4bda0e5a5bd" 转化为 b'\xe4\xbd\xa0\xe5\xa5\xbd'  形式,再用decode()进行转化。

  用法可查看官方文档https://docs.python.org/zh-cn/3/library/binascii.html?highlight=binascii

b="e4bda0e5a5bd" # 十六进制不带 '\x'  string 类型
#以下两个均可用

print(binascii.unhexlify(b))
#结果为: b'\xe4\xbd\xa0\xe5\xa5\xbd'


nn=binascii.unhexlify(b).decode()   
#nn=binascii.a2b_hex(b).decode()
print(nn)

结果:

可能出现的问题

完美解决

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值