2013-02-24 16 views
6

मुझे अपरकेस अक्षरों को कम करने वाले लोगों के साथ अपरकेस अक्षरों को परिवर्तित करने में समस्या है।पायथन: निचला() जर्मन umlauts

print("ÄÖÜAOU".lower()) 

ए, ओ और यू ठीक से परिवर्तित हो जाता है, लेकिन एक हे और Ü अपरकेस रहता है। कोई विचार?

सबसे पहले समस्या .decode साथ तय हो गई है ('utf-8') लेकिन मैं अभी भी एक दूसरे से एक है:

# -*- coding: utf-8 -*- 
original_message="ÄÜ".decode('utf-8') 
original_message=original_message.lower() 
original_message=original_message.replace("ä", "x") 
print(original_message) 

Traceback (सबसे हाल कॉल पिछले): फ़ाइल "Untitled.py", लाइन 4, original_message में = original_message.replace ("ए", "एक्स") UnicodeDecodeError: 'ascii' कोडेक स्थिति 0 में बाइट 0xc3 डिकोड नहीं कर सकते हैं: नहीं रेंज में क्रमसूचक (128)

+3

क्या आप अजगर 2 या 3 का उपयोग कर रहे हैं? –

+0

पायथन 2.7.2 ओएसएक्स के साथ भेजा गया। – user2104634

+3

@ user2104634 आपकी समस्या है। –

उत्तर

8

आप करेंगे इसे एक यूनिकोड स्ट्रिंग के रूप में चिह्नित करने की आवश्यकता है जब तक कि आप सादे ASCII के साथ काम नहीं कर रहे हों;

> print(u"ÄÖÜAOU".lower()) 

äöüaou 

यह जब चर के साथ काम कर रहे एक ही काम करता है, यह सब प्रकार चर के साथ शुरू करने के लिए आवंटित पर निर्भर करता है।

> olle = "ÅÄÖABC" 
> print(olle.lower()) 
ÅÄÖabc 

> olle = u"ÅÄÖABC" 
> print(olle.lower()) 
åäöabc 
+0

मेरे पास # - * - कोडिंग है: utf-8 - * - पहली पंक्ति में, यह पाइथन संस्करण की तरह दिखता है जैसे BlaXpirit सुझाव। – user2104634

+0

@ user2104634 उपर्युक्त उदाहरण मैक ओएस एक्स पर मानक पायथन 2.7.2 पर चलाया गया था। यूनिकोड के रूप में चिह्नित किए बिना, यह केवल यूसीआई वर्णों को 'यू' मार्कर के साथ कम केस में परिवर्तित करेगा, यह सही आउटपुट देता है। –

+0

तो शुरुआत में टैग पर्याप्त नहीं है? – user2104634

2

आप एन्कोडेड स्ट्रिंग के साथ काम कर रहे हैं, न कि यूनिकोड टेक्स्ट के साथ।

.lower() बाइट तारों की विधि केवल ASCII मानों से निपट सकती है। यूनिकोड करने के लिए अपने स्ट्रिंग डिकोड या एक unicode शाब्दिक (u''), तो लोअरकेस का उपयोग करें:

>>> print u"\xc4AOU".lower() 
äaou 
+0

@ user2104634: आपको [पायथन यूनिकोड हाउटो] (http://docs.python.org/2/howto/unicode.html) पढ़ने की आवश्यकता है; आप चर को एक 'यूनिकोड' मान ('variable.decode (एन्कोडिंग ')' में डीकोड करते हैं ')। –

1

आप अजगर 2 का उपयोग कर रहे हैं, लेकिन है शुरुआत में इस डाल अपने सभी तारों पर यू उपसर्ग के लिए "" नहीं चाहते हैं अपने कार्यक्रम की:

from __future__ import unicode_literals 
olle = "ÅÄÖABC" 
print(olle.lower()) 

अब वापस आ जाएगी:

åäöabc 

एन्कोडिंग निर्दिष्ट करता है व्याख्या करने के लिए कैसे वर्ण एक कार्यक्रम में डिस्क से में पढ़ा मैं हूं, लेकिन __ भविष्य से __ आयात विवरण बताता है कि कार्यक्रम के भीतर इन तारों को कैसे समझें। आपको शायद दोनों की आवश्यकता होगी।

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