2013-02-24 15 views
6

Ho un problema con la conversione di lettere maiuscole con dieresi in lettere minuscole.python: lower() dieresi tedesche

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

L'A, O e U viene convertito correttamente ma la Ä, Ö e Ü soggiorni maiuscoli. Qualche idea?

primo problema è stato risolto con l'.decode ('utf-8'), ma ho ancora un secondo:

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

Traceback (chiamata più recente scorso): file "Untitled.py", linea 4, in messaggio_originale = original_message.replace ("a", "x") UnicodeDecodeError: 'ascii' codec non può decodificare byte 0xc3 in posizione 0: non ordinale nella gamma (128)

+3

Stai usando python 2 o 3? –

+0

Python 2.7.2 quello fornito con OSX. – user2104634

+3

@ user2104634 C'è il tuo problema. –

risposta

8

Avrete è necessario contrassegnarlo come stringa unicode a meno che non si stia lavorando con ASCII semplice;

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

äöüaou 

Funziona allo stesso quando si lavora con variabili, tutto dipende dal tipo assegnato alla variabile per cominciare.

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

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

Ho # - * - coding: utf-8 - * - nella prima riga, sembra la sua versione di Python suggerita da BlaXpirit. – user2104634

+0

@ user2104634 L'esempio precedente è stato eseguito su Python 2.7.2 standard su Mac OS X. Senza marcatura come unicode, converte solo caratteri ascii in lettere minuscole, con il marcatore 'u', fornisce l'output corretto. –

+0

Quindi il tag all'inizio non è sufficiente? – user2104634

2

Si tratta di stringhe codificate, non con testo Unicode.

Il metodo .lower() di stringhe di byte può gestire solo valori ASCII. Decodifica la stringa in Unicode o utilizzare un unicode letterale (u''), poi le minuscole:

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

@ user2104634: è necessario leggere [Python Unicode HOWTO] (http://docs.python.org/2/howto/unicode.html); decodificate la variabile in un valore 'unicode' (' variable.decode (encoding ') '). –

1

Se stai usando Python 2, ma non si vuole prefisso u "" su tutti i vostri corde mettere questo all'inizio del vostro programma:

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

tornerà ora:

åäöabc 

La codifica specifica come interpretare i caratteri letti dal disco in un progr sono, ma la dichiarazione from __ future __ dice come interpretare queste stringhe all'interno del programma stesso. Probabilmente avrai bisogno di entrambi.

Problemi correlati