2013-02-24 25 views
6

Ich habe ein Problem mit der Umwandlung von Großbuchstaben mit Umlauten in Kleinbuchstaben.python: lower() deutsche Umlaute

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

Das A, O und U werden richtig konvertiert, aber die Ä, Ö und Ü bleiben in Großbuchstaben. Irgendwelche Ideen?

Der erste Problem ist mit dem .decode ('utf-8') fest, aber ich habe noch eine zweite:

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

Traceback (jüngste Aufforderung zuletzt): File "Untitled.py", Linie 4, in original_message = original_message.replace ("ä", "x") UnicodeDecodeError: ordinal nicht in Reichweite (128)

+3

Verwenden Sie Python 2 oder 3? –

+0

Python 2.7.2 der mit OSX gelieferte. – user2104634

+3

@ user2104634 Da ist dein Problem. –

Antwort

8

Sie über: 'ascii' Codec Byte 0xC3 in Position 0 nicht dekodieren Sie müssen es als Unicode-String markieren, es sei denn, Sie arbeiten mit normalem ASCII;

Es funktioniert das gleiche bei der Arbeit mit Variablen, es hängt alles von dem Typ ab, der der Variablen zugewiesen wird.

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

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

Ich habe # - * - Codierung: utf-8 - * - in der ersten Zeile sieht es wie die Python-Version wie BlaXpirit vorschlagen. – user2104634

+0

@ user2104634 Das obige Beispiel wurde auf Standard Python 2.7.2 unter Mac OS X ausgeführt. Ohne Unicode zu markieren, konvertiert es nur ASCII-Zeichen in Kleinbuchstaben, mit der Markierung "u" gibt es die korrekte Ausgabe. –

+0

Also ist das Tag am Anfang nicht genug? – user2104634

2

Sie haben es mit codierten Strings zu tun, nicht mit Unicode-Text.

Die .lower() Methode der Byte-Strings kann nur mit ASCII-Werten umgehen. Dekodieren Ihre Zeichenfolge in Unicode oder verwenden Sie eine unicode wörtliche (u''), dann Klein:

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

@ user2104634: Sie müssen das [Python Unicode HOWTO] lesen (http://docs.python.org/2/howto/unicode.html); Sie dekodieren die Variable zu einem "Unicode" -Wert ('variable.decode (encoding))'). –

1

Wenn Sie mit Python 2, wollen aber nicht Präfix u „“ auf allen Saiten setzen diese am Anfang Ihr Programm:

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

wird nun zurück:

åäöabc 

Die Codierung gibt an, wie die Charaktere von der Festplatte interpretieren in eine Progr lesen bin, aber die Anweisung from __ future __ import sagt aus, wie diese Strings im Programm selbst zu interpretieren sind. Sie werden wahrscheinlich beide brauchen.