2016-10-26 13 views
5

주어진 로케일에 따라 Python 문자열 모듈에서 알파벳을 얻으려고합니다 (발음 구별 기호 즉, 프랑스어는 éèêà ...). 여기에 최소한의 예입니다 : 파이썬 문서에서Python string.letters에 로케일 구별 부호가 포함되어 있지 않습니다.

import locale, string 

locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') 
print string.letters 
# shows ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 

locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8') 
print string.letters 
# also shows ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 

, string.letters is locale dependent,하지만 나를 위해 작동하지 않는 것 같다 있다고한다.

내가 뭘 잘못하고 있으며 언어 의존적 알파벳을 얻는 것이 올바른 방법일까요?

편집 : 방금 설정 한 후 로캘 print locale.getlocale()을 확인했는데 올바르게 변경되었습니다.

+0

은 어쩌면 UTF-8' 만 cp125x''와'작동하지 않습니다 - 볼 http://stackoverflow.com/questions/9907191/setting-locale -and-string-module-in-python – furas

+0

아마도 로켈이 업데이트되지 않기 때문에'setlocale' 다음에'locale.getlocale (locale.LC_ALL)'을 확인하십시오 –

+0

'.UTF-8' 부분을 남겨두면 글자가 더 많지만 어떤 인코딩을 찾을 수없는 ... –

답변

3

python 2.7 (python 3.x에 string.letters가 없음) 로케일을 'fr_FR'('fr_FR.ISO8859-1'이 아닌 'fr_FR.UTF-8')으로 설정하면 작동합니다.).

>>> import locale, string 
>>> locale.setlocale(locale.LC_ALL, 'es_ES') 
'es_ES' 
>>> string.letters 
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\xaa\xb5\xba\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff' 
>>> locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8') 
'es_ES.UTF-8' 
>>> string.letters 
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 

그래서 \의 Xaa는 등의 문자 "ª", \의 XAB "«", \의 XD1은 "N"과입니다. 그러나 인코딩 표현은 실제로 깨졌습니다.

내가보기 엔이 읽어 보시기 바랍니다 않습니다 https://pythonhosted.org/kitchen/unicode-frustrations.html