簡體   English   中英

Python isalpha()和scandics

[英]Python isalpha() and 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

最簡單的方法是在你的情況下使用unicode字符串。 只需在字符串前加上'u'符號:

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

或者這行作為文件的第一行:

# -*- coding: utf-8 -*-

看起來你的字符串常量中的字符串不是用cp1252編碼的字節字符串,這是使str.isalpha在你的語言環境中正常工作所需的。 你沒有說你輸入的環境。 我可以通過locale響應您在Windows上的方式來判斷; 也許你從某個IDE獲得UTF-8或從命令提示符窗口獲得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

您可以將上述結果與此圖表進行比較。

你也可以試試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM