2015-09-10 22 views
0

我試圖解碼一個十六進制字符串,但特殊字符。Python十六進制解碼顯示錯誤的結果爲特殊章程

當我運行

codecs.decode("5469eb73746f2026204b53484d5220666561742e205661737379", "hex") 

我得到b'Ti\xebsto & KSHMR feat. Vassy'

,但我想Tiësto & KSHMR feat. Vassy

我檢查的十六進制代碼網上,但它是正確的。我是否需要另一個功能,或者我只想錯過一步?

+0

我用'打印(codecs.decode( 「5469eb73746f2026204b53484d5220666561742e205661737379」, 「六角」))'和'得到b'Ti \ xebsto&克希米爾壯舉。 Vassy'' – mimo

+0

你有一個字節值,是的,所以先解碼爲Unicode。 –

+1

今後請包括您獲得的* full *輸出;那裏的''b'..''前綴告訴我你正在使用Python 3,而不是Python 2,因爲我最初不得不假設(從統計角度來說,Python 2更有可能)。 –

回答

4

您將十六進制值解碼爲bytes對象。如果您期望(Unicode)文本,請使用有效編碼解碼字節;你似乎有拉丁文1或Windows代碼頁1252數據在這裏:

>>> import codecs 
>>> codecs.decode("5469eb73746f2026204b53484d5220666561742e205661737379", "hex") 
b'Ti\xebsto & KSHMR feat. Vassy' 
>>> _.decode('latin1') 
'Tiësto & KSHMR feat. Vassy' 
+0

ok公平點:PI只是做了......你是對的:P –

+0

@JoranBeasley:'str.encode()'和'bytes.decode()'在Python 3中是完全一致的。你需要使用'codecs.encode ()'/'codecs.decode()'到達[轉換編解碼器](https://docs.python.org/3/library/codecs.html#python-specific-encodings),例如''hex' '。 –