2012-03-30 15 views
18

Wenn ich .lower() in Python 2.7 verwenden, Zeichenfolge wird nicht in Kleinbuchstaben für Buchstaben ŠČŽ konvertiert. Ich lese Daten aus dem Wörterbuch.Python 2.7 Kleinbuchstaben

Ich versuchte mit str(tt["code"]).lower(), tt["code"].lower().

Irgendwelche Vorschläge?

+1

Werfen Sie einen Blick auf http://stackoverflow.com/questions/727507/how-can-i-do-unicode-uppercase, ich denke, dass es wahrscheinlich verwandt ist. – mgilson

Antwort

22

Verwenden Unicode-Strings:

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

Sehen Sie, dass wenig u? Das bedeutet, dass es als Objekt unicode und nicht als Objekt str erstellt wurde.

+2

Aber wie bekommt er Unicode, wenn es kein Literal ist? – agf

+0

Ich lese von dict so, wie tt ["code"] in u "ŠČŽ" umgewandelt wird? – Yebach

+0

Verwenden Sie ** Unicode (tt ["code"], 'latin2') **, wobei 'latin2' verwendet wird, so dass Sie möglicherweise eine andere verwenden müssen. – Tupteq

4

Verwenden Unicode:

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

Sie müssen Ihren Text konvertieren so schnell Unicode, wie es Ihr Programm von der Außenwelt tritt, und nicht nur an dem Punkt, an dem Sie ein Problem bemerken.

Verwenden Sie entsprechend das codecs-Modul, um dekodierten Text einzulesen, oder verwenden Sie 'bytestring'.decode('latin2') (wo anstelle von latin2 sollten Sie verwenden, was auch immer die tatsächliche Codierung ist).

+0

Ich lese von dict so, wie tt ["code"] in u "ŠČŽ" umgewandelt wird? Ich kann ustr (tt ["code"]) nicht verwenden. Lower(). Encode ('utf8') oder str (tt [u "code"]). Lower(). Encode ('utf8') – Yebach

+0

@Yebach Siehe Aktualisierung. – Marcin