Похоже, что ваша строковая константа НЕ является байтовой строкой, закодированной в cp1252
, что необходимо для правильной работы str.isalpha
в вашем регионе. Вы не говорите, в какой среде вы это напечатали. По тому, как locale
отвечает, я могу сказать, что вы работаете в Windows; возможно, вы получаете UTF-8
из какой-то IDE или cp850
из окна командной строки.
То, что вы видите на экране, часто очень мало помогает в отладке. То, что вы видите, не то, что вы получили. Встроенная функция repr
- это (или хочет быть) ваш друг. В ASCII он однозначно покажет, что у вас есть на самом деле. [Python 3: repr
переименован ascii
, и есть новый repr
, который не тот, который вы хотите]
Попробуйте набрать s = "your string constant with 'accented' letters"
, а затем print repr(s)
и отредактируйте свой вопрос, чтобы показать результаты (копировать / вставить, не печатать повторно). Также скажите, какую версию Python вы используете.
Еще один потенциальный приятель - `unicodedata.name '... см. Ниже.
>>> 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
Вы можете сравнить приведенные выше результаты с на этом графике .