2010-02-23 14 views
9

मैं ऊपरी() और पूंजीकरण() जैसे अंतर्निहित कार्यों का उपयोग करके यूटीएफ -8 तारों को बदलना चाहता हूं।यूटीएफ -8 और ऊपरी()

उदाहरण के लिए:

>>> mystring = "işğüı" 
>>> print mystring.upper() 
Işğüı # should be İŞĞÜI instead. 

कैसे मैं इसे ठीक कर सकते हैं?

उत्तर

14

एन्कोडेड तारों पर क्रियाएं न करें; डीकोड unicode पहले।

>>> mystring = "işğüı" 
>>> print mystring.decode('utf-8').upper() 
IŞĞÜI 
+1

इस उत्तर द्वारा उत्पादित आउटपुट (IŞĞÜI, यू +0049 लैटिन कैपिटल लिटर I से शुरू) प्रश्न द्वारा प्रदान किए गए सही आउटपुट से अलग है (İŞĞÜI, यू + 0130 लैटिन कैपिटल लेटर I के साथ डीओटी के साथ शुरू)। – thomasd

9

यह वास्तव में सबसे अच्छा है एक सामान्य रणनीति के रूप में, हमेशा यूनिकोड के रूप में अपने पाठ रखने के लिए एक बार यह स्मृति में है: इस समय यह इनपुट है पर यह डिकोड, और इस समय वास्तव में यह सांकेतिक शब्दों में बदलना आप उत्पादन यह, अगर करने की जरूरत है इनपुट और/या इनपुट समय पर विशिष्ट एन्कोडिंग आवश्यकताएं हैं।

भले ही आप इस सामान्य रणनीति को अपनाने का विकल्प नहीं चुनते हैं (और आपको चाहिए!), आपके द्वारा आवश्यक कार्य को करने का एकमात्र ध्वनि तरीका अभी भी डीकोड, प्रक्रिया, एन्कोड करना है - एन्कोडेड पर कभी काम नहीं करना रूपों। यानी .:

mystring = "işğüı" 
print mystring.decode('utf-8').upper().encode('utf-8') 

आप काम पर और उत्पादन उद्देश्यों के लिए एन्कोडेड तार करने के लिए विवश कर रहे हैं यह मानते हुए कि। (आउटपुट बाधा दुर्भाग्य से यथार्थवादी है, असाइनमेंट बाधा नहीं है - बस mystring = u"işğüı" करें, इसे शुरुआत से यूनिकोड बनाएं, और कम से कम .decode कॉल को सहेजें! -)

+3

वही रणनीति दिनांक/समय के लिए एक अच्छा विचार है। जैसे ही यह इनपुट होता है और आउटपुट होने पर सही टाइमज़ोन पर वापस यूटीसी (या कम से कम टीजेड जागरूक) में कनवर्ट करें। यह अलग-अलग टाइमज़ोन और डेलाइट सेविंग के साथ समस्याओं का एक गुच्छा हल करता है। –

+0

@gnibbler: अच्छा बिंदु, मैं सहमत हूं। और कई वित्तीय गणनाओं के लिए, इनपुट को तुरंत दशमलव में परिवर्तित करने के बजाय (डिफ़ॉल्ट फ्लोट स्वीकार करने के बजाए) कई लोगों से बच सकते हैं "यह पैसा कहाँ गायब हो गया" लेखांकन दुःस्वप्न ;-)। –

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