2013-02-09 11 views
8

पाइथन 2.2 और PEP 261 के बाद से, पायथन को "संकीर्ण" या "चौड़ा" मोड में बनाया जा सकता है, जो "चरित्र" की परिभाषा को प्रभावित करता है, यानी "एक पायथन यूनिकोड स्ट्रिंग की एड्रेसेबल यूनिट"।पाइथन 3 में यूनिकोड तार क्या अभी भी "संकीर्ण"/"चौड़ा" निर्माण पर निर्भर करता है?

संकीर्ण में

वर्ण बनाता UTF-16 कोड इकाइयों की तरह लग रहे:।

>>> a = u'\N{MAHJONG TILE GREEN DRAGON}' 
>>> a 
u'\U0001f005' 
>>> len(a) 
2 
>>> a[0], a[1] 
(u'\ud83c', u'\udc05') 
>>> [hex(ord(c)) for c in a.encode('utf-16be')] 
['0xd8', '0x3c', '0xdc', '0x5'] 

(ऊपर somesources से सहमत नहीं है कि का कहना है कि संकीर्ण यूसीएस -2 का उपयोग बनाता है लगता है, नहीं UTF-16 बहुत पेचीदा वास्तव में)

क्या पाइथन 3.0 इस भेद को बनाए रखता है? या सभी पाइथन 3 व्यापक बनाता है?

(मैं PEP 393 के बारे में है कि 3.3 में तार के आंतरिक प्रतिनिधित्व बदलता है सुना है, लेकिन यह 3.0 ~ 3.2 से संबंधित नहीं है।)

उत्तर

9

हाँ, 3.0 से 3.2 के लिए वे करते हैं।

>>> a = '\N{MAHJONG TILE GREEN DRAGON}' 
>>> len(a) 
2 
>>> a 
'' 

इस व्यवहार 3.3+ का उपयोग कर Windows पर की उम्मीद है जबकि:: विंडोज, जबकि (सबसे) यूनिक्स विस्तृत का उपयोग करता

बनाता है विंडोज पर पायथन 3.2 का उपयोग करना संकीर्ण बनाता का उपयोग करता

>>> a = '\N{MAHJONG TILE GREEN DRAGON}' 
>>> len(a) 
1 
>>> a 
'\U0001f005' 
>>> print(a) 
Traceback (most recent call last): 
    File "<pyshell#3>", line 1, in <module> 
    print(a) 
UnicodeEncodeError: 'UCS-2' codec can't encode character '\U0001f005' 
in position 0: Non-BMP character not supported in Tk 

UCS- 2 कोडेक का उपयोग किया जाता है (मैं आईडीईई का उपयोग कर रहा हूं - टर्मिनल एक और त्रुटि दिखा सकता है)।

+0

मैंने कुछ परीक्षण किए हैं जो कि प्लेटफॉर्म का निर्माण कर रहे हैं। संकीर्ण: विंडोज़, मैक, नेटबीएसडी, ओपनबीएसडी, सोलारिस। वाइड: लिनक्स, फ्रीबीएसडी। पायथन 2.7 के साथ परीक्षण किया। तो मैं सबसे यूनिक्स * व्यापक निर्माण का उपयोग नहीं कर सकता। – JonnyJD

संबंधित मुद्दे