Python 로케일 오류: 지원되지 않는 로케일 설정
python에서 이 작업을 수행할 때 다음과 같은 오류가 발생하는 이유는 무엇입니까?
>>> import locale
>>> print str( locale.getlocale() )
(None, None)
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/locale.py", line 531, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
이것은 fr이나 nl과 같은 다른 로케일과도 동작합니다.Ubuntu 11.04를 사용하고 있습니다.
업데이트: 다음을 수행해도 아무 결과도 얻을 수 없습니다.
dpkg-reconfigure locales
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
다음 명령 실행
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
이거면 해결될 거야.
시켜 주세요..UTF-8
에 되어 있는 locale -a
★★.utf8
를 참조해 주세요.
LC_ALL=C 내보내기
은 아마 도 가지고 있지 않을까요?de_DE
사용 가능한 로케일.
은, 「 」로 표시할 수.locale -a
명령어를 입력합니다." " " , " " " :
$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
it_CH.utf8
it_IT.utf8
POSIX
「」로 는, 의 점에 해 주세요.it_IT
'다 하다'도 ..utf8
:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'it_IT') # error!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/locale.py", line 539, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
>>> locale.setlocale(locale.LC_ALL, 'it_IT.utf8')
'it_IT.utf8'
새 로케일을 설치하려면 다음 명령을 사용합니다.
sudo apt-get install language-pack-id
서 ''는id
언어 코드(여기서 취득)입니다.
로케일을 인스톨 하면, Julien Palard 의 어드바이스에 따라서, 다음과 같이 로케일을 재설정할 필요가 있습니다.
sudo dpkg-reconfigure locales
위의 답변 중 하나가 해결책을 제시합니다.
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
위의 솔루션의 문제는 Linux 쉘에서 수행해야 한다는 것입니다.단, 클라이언트머신에서 동작하기 위한 코드를 제공하고 있는 경우는, 이것은 잘못된 어프로치입니다.os.system()을 사용하여 위의 명령어를 실행해 보았습니다만, 아직 동작하지 않습니다.
나에게 효과가 있었던 솔루션은
locale.setlocale(locale.LC_ALL,'en_US.UTF-8')
은 결측값을명령어 과 같습니다.locale
의 locale
말합니다.
$ locale
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC=es_ES.utf8
LC_TIME=es_ES.utf8
LC_COLLATE="en_US.utf8"
LC_MONETARY=es_ES.utf8
LC_MESSAGES="en_US.utf8"
LC_PAPER=es_ES.utf8
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=es_ES.utf8
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
결측값을 채우려면 ~/.bashrc를 편집합니다.
$ vim ~/.bashrc
위의 명령어 뒤에 다음 행을 추가합니다(en_US 가 필요한 경우).UTF-8을 사용하는 언어:
export LANGUAGE="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
이 파일이 ReadOnly인 경우 GeekyBoy에서 언급한 단계를 따라야 합니다.Superuser의 Dr. Beco에 의한 답변에는 읽기 전용 파일의 보존에 관한 자세한 내용이 기재되어 있습니다.
파일을 저장한 후 다음을 수행합니다.
$ source ~/.bashrc
이제 당신은 더 이상 같은 문제에 직면하지 않을 것입니다.
Debian(또는 Debian Fork)에 있는 경우 다음과 같이 로케일을 추가할 수 있습니다.
dpkg-reconfigure locales
에러는, 「뭔가가 존재하지 않는 로케일을 사용하려고 하고 있다」라고 분명히 말하고 있습니다.
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/locale.py", line 581, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
locale.Error: 지원되지 않는 로케일 설정
사용 가능한 설정을 확인하려면 locale -a
deb@deb-Latitude-E7470:/ambot$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX
그 중 하나를 사용할 수 있습니다.
>>> locale.setlocale(locale.LC_ALL, 'en_AG.utf8')
'en_AG.utf8'
>>>
★★★★★★에de_DE
이 파일은 수동으로 조정하거나 update-locale 도구를 사용하여 업데이트할 수 있습니다.
update-locale LANG=de_DE.UTF-8
에서 Arch Linux를 으로써 이 할 수 .sudo locale-gen
참고로 저도 같은 문제가 있었습니다만, 어떤 해결책도 효과가 없었습니다.컴퓨터를 업그레이드하고 PC를 이행했습니다.영어와 스페인어가 혼재되어 있었습니다.
$ locale
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC=es_ES.utf8
LC_TIME=es_ES.utf8
LC_COLLATE="en_US.utf8"
LC_MONETARY=es_ES.utf8
LC_MESSAGES="en_US.utf8"
LC_PAPER=es_ES.utf8
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=es_ES.utf8
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
그러나 새로운 Debian 설치에서는 local로 영어를 선택했습니다.마지막으로 locales 패키지를 재구성하여 스페인어도 추가 및 생성했습니다.
$ grep -v "#" /etc/locale.gen
en_US.UTF-8 UTF-8
es_ES.UTF-8 UTF-8
python{,3}에서 로컬로케일을 설정하는 가장 쉬운 방법은 다음과 같습니다.
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'de_DE.UTF-8'
Linux Distro를 제대로 사용하고 있다면 로케일 인식 기능이 작동하며 다른 OS(또는 버그 IMHO)의 바이너리 배포에서도 작동합니다.
>>> import datetime as dt
>>> print(dt.date.today().strftime("%A %d. %B %Y"))
Sonntag 11. Dezember 2016
Dockerfile
ENV
.
# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG en_US.UTF-8
.bashrc 파일을 열고 이 파일을 추가합니다.
LC_ALL=C 내보내기
그런 다음 단말기에 source.secrc를 입력합니다.
- 명령어를 합니다.
locale
이치노예를 들어 다음과 같습니다.
LANG=en_
LANUGE = = en_US : en
LC_CTYPE=zh_CN.UTF-8
LC_NUMERIC="en_US" UTF-8"
LC_TIME="en_US" UTF-8"
LC_COLATE="en_US" UTF-8"
LC_MONERACIAL="en_US" UTF-8"
LC_MESSAGES="en_US" UTF-8"
LC_PAPER="en_US" UTF-8"
LC_NAME="en_US" UTF-8"
LC_ADDRESS="en_US. UTF-8"
LC_TELEPHONE="en_US" UTF-8"
LC_MEASUREMENT="en_US" UTF-8"
LC_IDENTIFICATION="en_US" UTF-8"
LC_ALL=
- 기재되어 있는
/etc/locale-gen
에 대한 코멘트 해제. 사용한 파일에 대한 주석 해제 - 려려를
locale-gen
추가된
이 에러는, 새로운 로케일을 추가한 직후에 발생할 가능성이 있습니다.python 인터랙티브셸)을가 있습니다.quit(
및 )의 개요python
할 수 있습니다에 액세스 합니다.
내가 너라면 BAB를 쓸 거야EL: http://babel.pocoo.org/en/latest/index.html
Docker에서도 같은 문제가 발생하고 있습니다.모든 스텝을 시도했지만 제대로 작동하지 않아 항상 로케일 오류가 발생했기 때문에 BABEL을 사용하기로 결정했고 모든 것이 잘 작동했습니다.
python은 를 찾습니다.UFT-8 단, .utf8이 있을 수 있습니다.를 인스톨 해 주세요.sudo dpkg-reconfigure local을 포함한 UFT-8 패키지
하여 에 하는 locale -a
사용하여 이 을 Docker 합니다.
RUN apt-get install -y locales
그러면 이미지에 모든 로케일이 추가됩니다.저는 AWS 기본 Ubuntu 서버의 일부가 아닌 de_DE를 사용했습니다.
Python이 특정 로케일에서 이름을 뱉어내도록 시도하다가 같은 문제를 안고 이곳에 도착했다.
답을 추구하다 보니 신비로운 느낌이 들었어요.
그 비단뱀 코드를 찾았어
import locale
print locale.getdefaultlocale()
>> ('en_DK', 'UTF-8')
그리고 정말locale.setlocale(locale.LC_TIME, 'en_DK.UTF-8')
작동하다
여기에 있는 팁을 사용하여 python 코드를 사용하여 무엇이 사용 가능한지 자세히 테스트했습니다.
import locale
loc_list = [(a,b) for a,b in locale.locale_alias.items() ]
loc_size = len(loc_list)
print loc_size,'entries'
for loc in loc_list:
try:
locale.setlocale(locale.LC_TIME, loc[1])
print 'SUCCES set {:12} ({})'.format(loc[1],loc[0])
except:
pass
그 결과
858 entries
SUCCES set en_US.UTF-8 (univ)
SUCCES set C (c.ascii)
SUCCES set C (c.en)
SUCCES set C (posix-utf2)
SUCCES set C (c)
SUCCES set C (c_c)
SUCCES set C (c_c.c)
SUCCES set en_IE.UTF-8 (en_ie.utf8@euro)
SUCCES set en_US.UTF-8 (universal.utf8@ucs4)
SUCCES set C (posix)
SUCCES set C (english_united-states.437)
SUCCES set en_US.UTF-8 (universal)
그 중 오직 위만 작동한다!근데...en_DK.UTF-8
이 리스트에는 없습니다만, 효과가 있습니다!?!뭐라고요? 그리고 python이 생성한 로케일 목록에는 da와 DK의 조합이 많이 포함되어 있습니다.그것을 찾고 있습니다만, 다시 da/DK용 UTF-8은 없습니다.
Point Linux distro (Debian 기반)를 사용하고 있습니다.여기는locale
특히 말한다LC_TIME="en_DK.UTF-8"
동작하고 있는 것은 알지만, 필요한 로케일은 아닙니다.
locale -a
말한다
C
C.UTF-8
en_DK.utf8
en_US.utf8
POSIX
따라서 다른 로케일을 설치해야 합니다.이 로케일을 편집하여 설치했습니다./etc/locale.gen
, 코멘트가 필요 없는 라인da_DK.UTF-8 UTF-8
및 run 명령어locale-gen
지금이다locale.setlocale(locale.LC_TIME, 'da_DK.UTF-8')
현지화된 날짜와 월 이름을 얻을 수 있습니다.
나의 결론:
Python : locale.locale_alias는 사용 가능한 로케일을 찾는 데 전혀 도움이 되지 않습니다.
Linux : 로케일리스트를 취득해, 새로운 로케일을 인스톨 하는 것은 매우 간단합니다.많은 도움을 받을 수 있습니다.
Windows:조금 조사를 하고 있습니다만, 결정적인 것은 없습니다.답변으로 이어지는 게시물은 있지만, 그것을 쫓고 싶은 충동을 느끼지 못하고 있습니다.
이 에러의 주된 원인은 local-name의 정확한 구문입니다.특히 분포에 따라 차이가 있는 것 같습니다.여기에서는, 다양한 회답/코멘트를 봐 왔습니다.
de_DE.utf8
de_DE.UTF-8
이것은 분명히 인간에게는 동일하지만, 표준 결정론적 알고리즘에는 해당되지 않습니다.
따라서 다음과 같은 작업을 수행할 수 있습니다.
DESIRED_LOCALE=de
DESIRED_LOCALE_COUNTRY=DE
DESIRED_CODEPAGE_RE=\.[Uu][Tt][Ff].?8
if [ $(locale -a | grep -cE "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}") -eq 1 ]
then
export LC_ALL=$(locale -a | grep -m1 -E "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}")
export LANG=$LC_ALL
else
echo "Not exactly one desired locale definition found: $(locale -a | grep -E "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}")" >&2
fi
먼저 Language Pack이 설치되어 있는지 확인합니다.
sudo apt-get install language-pack-en-base
sudo dpkg-reconfigure locales
이 질문에 대한 답은 아니지만 이 질문은 나의 문제에 대한 답을 찾는데 도움을 주었다.
도커 컨테이너 안에서 사용할 때 문제가 있었습니다.
local을 설치하고 locale.gen 파일에 언어를 추가하고 locale-gen(locale.gen에서 읽음)을 실행하여 최종적으로 언어를 설정함으로써 해결했습니다.
예를 들어 내 Docker file:
RUN apt-get install -y locales
RUN echo "pt_BR.UTF-8 UTF-8" >> /etc/locale.gen
RUN locale-gen pt_BR.UTF-8
ENV LANG=pt_BR.UTF-8
언급URL : https://stackoverflow.com/questions/14547631/python-locale-error-unsupported-locale-setting
'itsource' 카테고리의 다른 글
두 텍스트 문서 간의 유사성을 계산하는 방법은 무엇입니까? (0) | 2022.10.26 |
---|---|
재귀적 콜라츠 추측 함수 프로그램이 출력을 제공하지 않습니다. (0) | 2022.10.26 |
Java는 Currying을 지원합니까? (0) | 2022.10.26 |
python과 return matches의 두 목록을 비교하려면 어떻게 해야 합니까? (0) | 2022.10.26 |
키별로 JavaScript 개체 정렬 (0) | 2022.10.26 |