2012-03-30 24 views
18

Cuando uso .lower() en Python 2.7, la cadena no se convierte a minúsculas para las letras ŠČŽ. Leo datos del diccionario.python 2.7 minúsculas

Intenté usar str(tt["code"]).lower(), tt["code"].lower().

¿Alguna sugerencia?

+1

Eche un vistazo a http://stackoverflow.com/questions/727507/how-can-i-do-unicode-uppercase, creo que probablemente esté relacionado. – mgilson

Respuesta

22

cadenas Unicode es:

[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() 
ščž 

ves que poco u? Eso significa que se creó como un objeto unicode en lugar de un objeto str.

+2

Pero, ¿cómo obtiene unicode si no es literal? – agf

+0

Estoy leyendo de dict, así que ¿cómo convertir tt ["code"] a "ŠČŽ"? – Yebach

+0

Use ** unicode (tt ["code"], 'latin2') **, donde 'latin2' es la codificación utilizada, por lo que puede necesitar usar una diferente. – Tupteq

4

utilizar Unicode:

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

Es necesario para convertir el texto a unicode tan pronto como entra en su programa del mundo exterior, en lugar de simplemente en el punto en el que se observe un problema.

En consecuencia, utilice el módulo codecs para leer en texto decodificado, o use 'bytestring'.decode('latin2') (donde en lugar de latin2 debe usar cualquiera que sea la codificación real).

+0

Estoy leyendo de dict, así que ¿cómo convertir tt ["code"] a "ŠČŽ"? No puedo usar ustr (tt ["code"]). Lower(). Encode ('utf8') o str (tt [u "code"]). Lower(). Encode ('utf8') – Yebach

+0

@Yebach Ver actualización – Marcin