簡體   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