2010-11-26 6 views
2

Gibt es eine Möglichkeit, Python Isalpha Methode verstehen Scandics? Ich habe Folgendes versucht:Python Isalpha() und Scandics

>>> import locale 
>>> locale.getlocale() 
(None, None) 
>>> 'thisistext'.isalpha() 
True 
>>> 'äöå'.isalpha() 
False 
>>> locale.setlocale(locale.LC_ALL,"") 
'Finnish_Finland.1252' 
>>> locale.getlocale() 
('Finnish_Finland', '1252') 
>>> 'äöå'.isalpha() 
False 

Antwort

5

Der einfachste Weg ist, Unicode-Strings zu verwenden, wenn es in Ihrem Fall in Ordnung ist. Setzen Sie einfach 'u' Symbol vor string:

>>> u'привіт'.isalpha() 
True 

Oder diese Zeile als erste in der Datei:

# -*- coding: utf-8 -*- 
+0

Nun natürlich :) Danke. – user250765

+1

Für diejenigen, die es verpasst haben, notieren Sie das "u", das eine Unicode-Zeichenfolge deklariert. – marcog

+0

marcog, aktualisiert;) –

3

Es sieht aus wie das, was Sie in Ihrer String-Konstante haben, ist nicht ein Byte-String codiert in cp1252 , was erforderlich ist, damit str.isalpha in Ihrem Land korrekt funktioniert. Sie sagen nicht, in welcher Umgebung Sie das eingegeben haben. Ich kann von der Art und Weise sagen, dass locale antwortet, dass Sie auf Windows sind; vielleicht erhalten Sie UTF-8 von einer IDE oder cp850 von einem Eingabeaufforderungsfenster.

Was Sie auf Ihrem Bildschirm sehen, ist oft sehr wenig Hilfe beim Debuggen. Was du siehst, ist NICHT, was du hast. Die integrierte Funktion repr ist (oder möchte) Ihr Freund sein. Es wird eindeutig in ASCII zeigen, was Sie tatsächlich haben. [Python 3: repr wird ascii umbenannt und es gibt eine neue repr die nicht das, was Sie wollen]

Versuchen eingeben s = "your string constant with 'accented' letters" dann print repr(s) und bearbeiten Sie Ihre Frage, die Ergebnisse zeigen (copy/paste, nicht erneut eingeben nicht). Sagen Sie auch, welche Python-Version Sie verwenden.

Ein anderer Möchtegernfreund ist `unicodedata.name '... siehe unten.

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, 'Finnish') 
'Finnish_Finland.1252' 
>>> s = '\xe4\xf6\xe5' 
>>> import unicodedata 
>>> for c in s: 
...  u = c.decode('1252') 
...  print repr(c), repr(u), unicodedata.name(u, '<no name>') 
... 
'\xe4' u'\xe4' LATIN SMALL LETTER A WITH DIAERESIS 
'\xf6' u'\xf6' LATIN SMALL LETTER O WITH DIAERESIS 
'\xe5' u'\xe5' LATIN SMALL LETTER A WITH RING ABOVE 
>>> s.isalpha() 
True 

Sie können die obigen Ergebnisse mit this chart vergleichen.

1

Sie konnten dieses versuchen:

>>> 'äöå'.decode('utf-8').isalpha() 
True