2012-03-30 20 views
18

Quando utilizzo .lower() in Python 2.7, la stringa non viene convertita in lettere minuscole per le lettere ŠČŽ. Ho letto i dati dal dizionario.python 2.7 in minuscolo

Ho provato a utilizzare str(tt["code"]).lower(), tt["code"].lower().

Qualche suggerimento?

+1

Dai un'occhiata a http://stackoverflow.com/questions/727507/how-can-i-do-unicode-uppercase, penso che sia probabilmente correlato. – mgilson

risposta

22

stringhe Unicode Usa:

[email protected]:~$ python 
Python 2.7.2+ (default, Oct 4 2011, 20:06:09) 
[GCC 4.6.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print "ŠČŽ" 
ŠČŽ 
>>> print "ŠČŽ".lower() 
ŠČŽ 
>>> print u"ŠČŽ".lower() 
ščž 

Vedi quel piccolo u? Ciò significa che è stato creato come oggetto unicode anziché come oggetto str.

+2

Ma come ottiene l'Unicode se non è un valore letterale? – agf

+0

Sto leggendo da dict quindi come convertire tt ["code"] in u "ŠČŽ"? – Yebach

+0

Usa ** unicode (tt ["code"], "latin2") **, dove "latin2" è la codifica usata, quindi potresti aver bisogno di usarne una diversa. – Tupteq

4

Uso unicode:

>>> print u'ŠČŽ'.lower().encode('utf8') 
ščž 
>>> 

È necessario convertire il testo a unicode non appena entra nel vostro programma di dal mondo esterno, piuttosto che limitarsi al punto in cui si nota un problema.

Di conseguenza, utilizzare il modulo codecs per leggere nel testo decodificato o utilizzare 'bytestring'.decode('latin2') (dove al posto di latin2 è necessario utilizzare qualsiasi sia la codifica effettiva).

+0

Sto leggendo da dict quindi come convertire tt ["code"] in u "ŠČŽ"? Non posso usare ustr (tt ["code"]). Lower(). Encode ('utf8') o str (tt [u "code"]). Lower(). Encode ('utf8') – Yebach

+0

@Yebach Vedi l'aggiornamento. – Marcin