2010-11-26 62 views
2

有沒有辦法讓python isalpha方法理解scandics?我試過以下內容:Python isalpha()和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 

回答

5

最簡單的方法是使用unicode字符串,如果在你的情況下沒問題。字符串之前,只要把「U」符號:

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

還是這行首先在文件:

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

當然好了:)謝謝。 – user250765 2010-11-26 15:49:36

3

它看起來像你有你的字符串常量究竟是不是在cp1252編碼的字節串,這是使str.isalpha在您的語言環境中正常工作所必需的。你不會說你在什麼環境下輸入。我可以從locale的回答中得知您在Windows上;也許你從某個IDE或cp850從命令提示窗口獲得UTF-8

你在屏幕上看到的內容往往對調試的幫助很少。你看到的不是你所擁有的。內置的功能是(或想成爲)你的朋友。它將以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 

您可以將上述結果與this chart進行比較。

1

你也可以試試這個:

>>> 'äöå'.decode('utf-8').isalpha() 
True 
相關問題