繁体   English   中英

在 Python 3 中解码十六进制字符串

[英]Decode Hex String in Python 3

在 Python 2 中,将字符串的十六进制形式转换为相应的 unicode 非常简单:

comments.decode("hex")

其中,变量“评论”是在一个文件中(该行的其余部分的线的部分需要转换,因为它仅在ASCII表示。

然而,现在在 Python 3 中,这不起作用(我假设是因为字节/字符串与字符串/unicode 开关。我觉得 Python 3 中应该有一个单行代码来做同样的事情,而不是阅读整行作为一系列字节(我不想这样做),然后分别转换行的每一部分。如果可能,我想将整行作为 unicode 字符串读取(因为其余的该行是 unicode),并且只从十六进制表示转换这一部分。

就像是:

>>> bytes.fromhex('4a4b4c').decode('utf-8')
'JKL'

只需输入您正在使用的实际编码即可。

import codecs

decode_hex = codecs.getdecoder("hex_codec")

# for an array
msgs = [decode_hex(msg)[0] for msg in msgs]

# for a string
string = decode_hex(string)[0]

@unbeli 和 @Niklas 的答案很好,但 @unbeli 的答案不适用于所有十六进制字符串,最好在不导入额外库(编解码器)的情况下进行解码。 以下应该有效(但对于大字符串不会很有效):

>>> result = bytes.fromhex((lambda s: ("%s%s00" * (len(s)//2)) % tuple(s))('4a82fdfeff00')).decode('utf-16-le')
>>> result == '\x4a\x82\xfd\xfe\xff\x00'
True

基本上,它通过用零填充并解码为 utf-16 来解决无效的 utf-8 字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM