2010-07-19 20 views
21

अजगर 2 में, इसी यूनिकोड में एक स्ट्रिंग का हेक्साडेसिमल रूप परिवर्तित स्पष्ट था लाइन के बाकी अब अजगर 3 में, हालांकि, यह काम नहीं करता (मैं बाइट्स/स्ट्रिंग बनाम स्ट्रिंग की वजह मान के रूप में यह केवल ASCII में प्रतिनिधित्व किया है, परिवर्तित किया नहीं जरूरत है।डिकोड हेक्स स्ट्रिंग अजगर में 3

/यूनिकोड स्विच। मुझे लगता है कि पूरी लाइन को पढ़ने के बजाय, एक ही चीज़ करने के लिए पाइथन 3 में एक-लाइनर होना चाहिए बाइट्स की किरणें (जो मैं नहीं करना चाहता) और फिर लाइन के प्रत्येक हिस्से को अलग से परिवर्तित कर रहा हूं। यदि यह संभव है, तो मैं पूरी लाइन को यूनिकोड स्ट्रिंग के रूप में पढ़ना चाहूंगा (क्योंकि शेष पंक्ति यूनिकोड में है) और केवल इस भाग को हेक्साडेसिमल प्रतिनिधित्व से परिवर्तित करें।

उत्तर

40

कुछ की तरह:

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

बस वास्तविक एन्कोडिंग प्रयोग कर रहे हैं डाल दिया।

+0

जब तक डीकोडेड स्ट्रिंग * वास्तव में utf-8 नहीं है, तो मैं इसके बजाय 'डीकोड (' ascii ')' का उपयोग करने की सलाह दूंगा। –

+3

क्या होगा यदि यह \ 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] 
संबंधित मुद्दे