2011-08-18 12 views
16

मैं unichar को html इकाई कन्वर्ट करने के लिए कोशिश कर रहा हूँ, html इकाई 󮠖 है में नहीं ARG जब मैं निम्नलिखित करने की कोशिश:ValueError: unichr() रेंज (0x10000) (संकीर्ण अजगर का निर्माण)

unichr(int(976918)) 

मैं त्रुटि मिली कि:

ValueError: unichr() arg not in range(0x10000) (narrow Python build) 

लगता है जैसे कि यह unichar के लिए रेंज रूपांतरण से बाहर है।

उत्तर

26

आप एक स्ट्रिंग यूनिकोड भागने है कि डिकोड कर सकते हैं (\U 8 हेक्स अंक, जिसके बाद शून्य गद्देदार) "unicode-escape" एन्कोडिंग का उपयोग:

>>> s = "\\U%08x" % 976918 
>>> s 
'\\U000ee816' 

>>> c = s.decode('unicode-escape') 
>>> c 
u'\U000ee816' 

एक संकीर्ण निर्माण यह एक UTF-16 के किराए के रूप में संग्रह किया गया है पर जोड़ी:

>>> list(c) 
[u'\udb7a', u'\udc16'] 

इस किराए की जोड़ी एन्कोडिंग के दौरान एक कोड इकाई के रूप में सही ढंग से संसाधित किया जाता है:

>>> c.encode('utf-8') 
'\xf3\xae\xa0\x96' 

>>> '\xf3\xae\xa0\x96'.decode('utf-8') 
u'\U000ee816' 
+0

976 9 18 से 000ee816 परिवर्तित करने के लिए 'हेक्स (9 76 9 18) [2:]। Zfill (8) ' – EoghanM

4

आदेश में इस के लिए काम करने के लिए, आप या तो अजगर स्वयं बनाएं, यह निर्दिष्ट

./configure --enable-unicode=ucs4 

संकलन से पहले, वरना आप अजगर 3.

आप ऐसा करते हैं यहां तक ​​कि अगर में ले जाने की जरूरत है, विंडोज़ पर स्पष्ट रूप से समस्याएं हैं, जिन्हें पायथन (3.3) के अगले संस्करण में तय किया जाएगा।

5

यहां एक वैकल्पिक कामकाज है जिसे मैंने struct मॉड्यूल के साथ विकसित किया है।

def unichar(i): 
    try: 
     return unichr(i) 
    except ValueError: 
     return struct.pack('i', i).decode('utf-32') 

>>> unichar(int('976918')) 
u'\U000ee816' 
संबंधित मुद्दे