2012-03-30 12 views
18

Kiedy używam .lower() w Pythonie 2.7, ciąg nie jest konwertowany na małe litery dla liter ŠČŽ. Czytam dane ze słownika.python 2.7 małe litery

Próbowałem używać str(tt["code"]).lower(), tt["code"].lower().

Wszelkie sugestie?

+1

Spójrz na http://stackoverflow.com/questions/727507/how-can-i-do-unicode-uppercase, myślę, że to jest prawdopodobnie powiązane. – mgilson

Odpowiedz

22

używać Unicode ciągi:

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

Zobacz ten mały u? Oznacza to, że został utworzony jako obiekt, a nie obiekt str.

+2

Ale jak on uzyskuje unikod, jeśli nie jest literałem? – agf

+0

Czytam z dyktatury, jak przekonwertować tt ["kod"] na "ŠČŽ"? – Yebach

+0

Użyj ** unicode (tt ["kod"], "latin2") **, gdzie używane jest kodowanie "latin2", więc może być konieczne użycie innego. – Tupteq

4

używać Unicode:

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

Trzeba przekonwertować tekst Unicode jak tylko wejdzie on swój program od świata zewnętrznego, a nie tylko w momencie, w którym można zauważyć problem.

Odpowiednio, albo użyj modułu codecs do odczytu w zdekodowanym tekście, albo użyj 'bytestring'.decode('latin2') (gdzie zamiast łacińskiego 2 powinieneś użyć cokolwiek, co jest faktycznym kodowaniem).

+0

Czytam z dyktatury, jak przekonwertować tt ["kod"] na "ŠČŽ"? Nie mogę użyć ustr (tt ["code"]). Lower(). Encode ('utf8') lub str (tt [u "code"]). Lower(). Encode ('utf8') – Yebach

+0

@Yebach Zobacz aktualizację. – Marcin

Powiązane problemy