2010-07-19 49 views
21

Trong Python 2, chuyển đổi hình thức thập lục phân của một chuỗi vào unicode tương ứng là đơn giản:Giải mã Hex String trong Python 3

comments.decode("hex") 

nơi biến 'bình luận' là một phần của một dòng trong một tập tin (phần còn lại của dòng không không cần phải được chuyển đổi, vì nó được đại diện duy nhất tại ASCII.

Bây giờ trong Python 3, tuy nhiên, điều này không làm việc (tôi giả sử vì các byte/chuỗi vs chuỗi/unicode switch Tôi cảm thấy như cần có một lớp lót trong Python 3 để làm điều tương tự, thay vì đọc toàn bộ dòng như là một ries byte (mà tôi không muốn làm) và sau đó chuyển đổi từng phần của dòng một cách riêng biệt. Nếu nó có thể, tôi muốn đọc toàn bộ dòng như là một chuỗi unicode (vì phần còn lại của dòng là unicode) và chỉ chuyển đổi một phần này từ một biểu diễn hệ thập lục phân.

Trả lời

40

Cái gì như:

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

Chỉ cần đặt mã hóa thực tế mà bạn đang sử dụng.

+0

Trừ khi chuỗi đã giải mã * thực sự là utf-8, tôi khuyên bạn nên sử dụng 'giải mã ('ascii')' thay thế. –

+3

nếu nó ở định dạng \ x6b \ x61 \ x6d \ x69 –

1
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] 
Các vấn đề liên quan