Perl에서 로케일 설정 경고를 수정하는 방법?


596

내가 실행 perl하면 경고 메시지가 나타납니다.

perl : 경고 : 로케일 설정에 실패했습니다.
펄 : 경고 : 로케일 설정을 확인하십시오 :
    언어 = (설정 해제),
    LC_ALL = (설정 해제),
    LANG = "en_US.UTF-8"
시스템에서 지원 및 설치됩니다.
perl : 경고 : 표준 로케일 ( "C")로 폴백합니다.

어떻게 고치나요?


오류 메시지와 같은 로케일 설정을 확인하면 어떻게됩니까?
brian d foy

3
로케일을 설치하는 대신 로케일을 변경할 수도 있습니다. 내 우분투 상자에서이 작업은 한 사용자에 대해 편집하여 수행됩니다~/.pam_environment
Janus Troelsen

우분투를 실행하는 ODROID-C1에서 문제는 ~ / .pam_environment 파일이었습니다. 변수 중 일부는 en_US.UTF-8 대신 es_US.UTF-8입니다. 감사합니다.
f1vefour

Cygwin \ Babun에 있습니다. perl의 재설치 만 해결되었습니다.
Lucas Soares

답변:


449

귀하의 OS는에 대해 모른다 en_US.UTF-8.

특정 플랫폼에 대해서는 언급하지 않았지만 문제를 재현 할 수 있습니다.

uname -a %
OSF1 hunter2 V5.1 2650 알파
% perl -e 이탈
perl : 경고 : 로케일 설정에 실패했습니다.
펄 : 경고 : 로케일 설정을 확인하십시오 :
    LC_ALL = (설정 해제),
    LANG = "en_US.UTF-8"
    시스템에서 지원 및 설치됩니다.
perl : 경고 : 표준 로케일 ( "C")로 폴백합니다.

내 생각에 ssh를 사용하여 최신 데스크톱 컴퓨터 에서이 오래된 호스트에 연결합니다. /etc/ssh/sshd_config포함하는 것이 일반적입니다

AcceptEnv LANG LC_*

이를 통해 클라이언트는 해당 환경 변수의 값을 새 세션으로 전파 할 수 있습니다.

경고는 전체 로케일이 필요하지 않은 경우 경고를 없애는 방법에 대한 힌트를 제공합니다.

% env LANG = C 펄 -e 이탈
%

또는 bash와 함께 :

$ LANG = C 펄 -e 이탈
$ 

영구 수정하려면 다음 중 하나를 선택하십시오.

  1. 이전 호스트에서는 LANG쉘의 초기화 파일에서 환경 변수를 설정하십시오.
  2. , 클라이언트 측에서 환경을 수정 보다는 ssh hunter2명령을 사용합니다 LANG=C ssh hunter2.
  3. 관리자 권한이 SendEnv LANG LC_*있는 경우 로컬 /etc/ssh/ssh_config 파일 에서 행 을 주석 처리하여 ssh가 환경 변수를 보내지 않도록 하십시오. (감사합니다 이 답변에 . 자세한 내용 은 OpenSSH 버그 1285 를 참조하십시오 .)

22
감사! git으로 서버에 연결할 때이 오류 메시지가 나타났습니다. dpkg-reconfigure locales메시지 와 함께 de_CH.UTF-8 (지원되지 않았지만 로컬로 사용됨)을 추가 하면 사라집니다.
Simon A. Eugster

82
sshd_config에서 "AcceptEnv LANG LC_ *"를 제거하면 마침내 해결되었습니다. 힌트 주셔서 감사합니다!
madc

2
@Greg Bacon, 예를 들어 / etc / environment 파일을 작성하여 환경 변수 시스템을 넓게 설정하려는 경우도 없습니까? help.ubuntu.com/community/…
fraxture

25
@HermannIngjaldsson, 적어도 Ubuntu (12.10)에서는 서버를 재부팅 할 필요가 없습니다 ( "AcceptEnv LANG LC_ *"를 제거한 후). 방금 ssh config :를 다시로드했습니다 .1 service ssh reload초의 시간이 걸리고 현재 ssh 세션이 종료되지 않습니다.
noamtm

3
클라이언트 시스템에서 'export LC_ALL = C'를 추가 한 다음 'source ~ / .bashrc'를 추가하여 문제를 해결하십시오.
EffectiveMatrix

476

Mac OS Lion (10.7) 또는 Cygwin (Windows 10)에서이 문제를 해결하는 방법은 다음과 같습니다.

호스트 시스템의 bashrc 또는 bash_profile에 다음 행을 추가하십시오.

# Setting for the new UTF-8 terminal support in Lion
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

zsh를 사용하는 경우 zshrc를 편집하십시오.

# Setting for the new UTF-8 terminal support in Lion
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8

6
고마워, 나는이 문제에 대한 해결책을 오랫동안 찾았고, 나는 그것이 항상 우분투 서버 구성에 문제가 있다고 생각했으며 도움이되는 해결책이없는 것처럼 보였습니다 (모든 dkpg-reconfigure 물건 (
Teemu Kurppa)

5
때문에 LC_ALL덮어 쓰기 다른 모든 변수, 차라리 설정 줄 LANG=de_AT.UTF-8및 개별 변수 좋아 LC_MESSAGES=en_US.UTF-8. 변수를 설정하지 않으면로 돌아갑니다 LANG. 예를 들어. unset LC_CTYPE강제로 다시 떨어집니다 LANG.
데이비드

4
.bashrc에 해당 줄을 배치해도 작동하지 않았지만 bash_profile이 해결했습니다! 파일을 만들어야했습니다.
Hermann Ingjaldsson

5
이 줄을 넣으면 ~/.bashrc나를 위해 해결되었습니다 ... 다음을 사용하여 다시로드해야합니다 source ~/.bashrc... Thnks <3
Enissay

5
고마워, 이것은 ~ / .zshrc의 맨 아래에있는 Mac OS X El Capitan의 ZSH 및 oh-my-zsh 플러그인에서 잘 작동했습니다 : LC_CTYPE = en_US.UTF-8 LC_ALL = en_US.UTF-8
Valerio Schiavoni

207

debootstrap을 사용하여 rootfs를 작성하는 경우 로케일을 생성해야합니다. 다음을 실행하여이 작업을 수행 할 수 있습니다.

# (optional) enable missing locales
sudo nano /etc/locale.gen

# then regenerate
sudo locale-gen

이 팁은 https://help.ubuntu.com/community/Xen에서 제공합니다.


28
이것은 나를위한 진짜 수정입니다.
Afriza N. Arief

5
locale-gen은 논쟁을 취하지 않습니다 (적어도 데비안 안정에서는). 대신, 편집 /etc/locale.gen는, 다음 실행 sudo는 로케일 세대 원하는 로케일의 주석을 해제합니다
샘 왓킨스

2
에 수정Ubuntu Server
Paschalis

5
데비안에서는 $ echo en_US UTF-8 >> /etc/locale.gen먼저 해야 할 수도 있습니다 .
akhmed

1
젠투에서는 (적어도) locale-gen논쟁을하지 않습니다. 에서 읽습니다 /etc/locale.gen.
Pistos

142

사용하다:

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_CTYPE=en_US.UTF-8

데비안에서 작동합니다 . 이유를 모르겠지만 locale-gen에는 결과가 없습니다.

중대한! 임시 해결책입니다. 각 세션마다 실행해야합니다.


13
이것은 나를 위해 일했습니다. 방금 .bashrc파일에 넣었습니다 .
Anirudh Ramanathan

2
나도 일했다. 난 단지 두 설정 펄 경고에 해제 나타났다 (언어 및 LC_ALL)를 설정했다
로랑

2
데비안에서는 local-gen주석 처리되지 않은 로케일 만 처리합니다 /etc/local.gen. echo en_US UTF-8 >> /etc/locale.gen먼저 해야 할 수도 있습니다 .
akhmed

이것은 초등학교 OS Freaya (우분투 기반)에서 나를 위해 일했습니다
valkirilov

1
LC_ C의 타입 일 수있다?
mixel

139

이것은 일반적으로 Linux 상자에 로케일을 올바르게 설정하지 않았 음을 의미합니다.

데비안 또는 우분투에서는 그렇게해야합니다.

$ sudo locale-gen
$ sudo dpkg- 로케일 재구성

man locale-gen 도 참조하십시오 .


30
여기에서 문제를 해결하지 않습니다
Somatik

6
dpkg-reconfigure locales-debian 7.1
newUserName에

4
dpkg-reconfigure locales는 처음부터 수정하려고하는 것과 동일한 perl locale 오류 메시지로 실패합니다!
matteo

10
내가 먼저 누락 된 로케일을 추가했다 있지만 이것은 우분투 14.04에 나를 위해 일한sudo locale-gen es_UY.UTF-8
알프

2
@matteo 오류를 수정하기 전에는 처음입니다. 다시 시도하면 문제가 해결됩니다.
Zero3

92

macOS 및 Mac OS X 사용자 만

Git 을 사용하는 동안 같은 경고가 나타납니다.

이 경고를 해결하려면 옵션을 선택 취소 하고 Set locale environment variable on startup터미널을 다시 시작하십시오. 아래 스크린 샷은 내 터미널 설정을 나타냅니다.

여기에 이미지 설명을 입력하십시오


3
와우, 너무 간단하고 내 문제를 해결! 감사!
Michal

3
나는 다른 모든 것을 시도했지만 이것은 나를 위해 그것을했다. iTerm을 사용하고 동일한 문자 인코딩 옵션이 있습니다.
Michael Morrison

2
불행히도 이것은 ZSH를 깨뜨립니다 (도청이 중단되었습니다)
Christian

1
이것은 Mac OS에 대한 트릭을 완전히 수행합니다. 그건 그렇고,이 시작은 macOS Sierra로 업그레이드 한 직후에 나에게 일어났습니다. 그리고 이것은 나를 위해이 문제를 해결했습니다.
Paulo Malvar

1
이것은 내 문제를 해결했다. Sierra에서 Mac OS X High Sierra로 업데이트 한 후에 나에게 일이 시작되었습니다.
Lucian Irimie

36

우분투에서 간단한 수정입니다. 명령 행에서 다음 명령을 실행하여 로케일을 처음부터 생성해야합니다.

sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales

로캘을 만든 다음 다시 구성해야합니다.


이것은 심지어 사용하여도 잘 작동했습니다 pt_BR pt_BR.UTF-8-감사합니다.
Marcos Freitas

29

/etc/environment데비안과 우분투에서 문제를 해결하기 위해 다음을 추가하십시오 (물론 사용하려는 로케일과 일치하도록 수정하십시오).

LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8

7
.. locale in 설정 /etc/environment이 더 이상 사용되지 않으며 대신에 설정해야한다는 경고가 표시 됩니다 /etc/default/locale. 둘 다 지금 작동하는 것 같습니다.
joscarsson

해야LC_CTYPE
aexl

25

나는 지금 이것을 사용하고있다 :

$ cat /etc/environment
...
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

그런 다음 SSH 세션에서 로그 아웃했다가 다시 로그인하십시오.

이전 답변 :

만이 나를 도왔다 :

$ locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=ru_RU.UTF-8
LC_TIME=ru_RU.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=ru_RU.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=ru_RU.UTF-8
LC_NAME=ru_RU.UTF-8
LC_ADDRESS=ru_RU.UTF-8
LC_TELEPHONE=ru_RU.UTF-8
LC_MEASUREMENT=ru_RU.UTF-8
LC_IDENTIFICATION=ru_RU.UTF-8
LC_ALL=

$ sudo su

# export LANGUAGE=en_US.UTF-8
# export LANG=en_US.UTF-8
# export LC_ALL=en_US.UTF-8

# locale-gen en_US.UTF-8
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.

# dpkg-reconfigure locales
Generating locales...
  en_AG.UTF-8... done
  en_AU.UTF-8... done
  en_BW.UTF-8... done
  en_CA.UTF-8... done
  en_DK.UTF-8... done
  en_GB.UTF-8... done
  en_HK.UTF-8... done
  en_IE.UTF-8... done
  en_IN.UTF-8... done
  en_NG.UTF-8... done
  en_NZ.UTF-8... done
  en_PH.UTF-8... done
  en_SG.UTF-8... done
  en_US.UTF-8... up-to-date
  en_ZA.UTF-8... done
  en_ZM.UTF-8... done
  en_ZW.UTF-8... done
Generation complete.

# exit

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="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=en_US.UTF-8

이것은 Ubuntu 15.04에서 나에게 효과적이었습니다. 많은 감사합니다.
Goke Obasa

22

많은 검색 후 데비안 에서이 트릭을 수행했습니다.

먼저:

sudo apt-get purge locales

그때:

sudo aptitude install locales

그리고 유명한 :

sudo dpkg-reconfigure locales

이것은 로케일 시스템을 제거한 다음 로케일을 다시 설치하고 libc6을 2.19에서 2.13으로 다운 그레이드합니다. 이것이 문제입니다. 그런 다음 로케일을 다시 구성하십시오.


4
dpkg-reconfigure locales필요한 전부입니다. sudo당신이 sudo 타입의 사람이라면, 또는 루트로해라. 그런 다음 쉘 환경에있는 로케일을 선택하십시오.
mknaf

6
dpkg-reconfigure locales는 필요한 모든 것이어야한다. 100 번 시도하고 인터넷을 둘러 본 후에는 이것이 당신이 본 전부이며 문제가 여전히 해결되지 않습니다. 위의 시도하십시오. 그런 다음 다시 와서 투표하십시오. :)
tkjef

1
마지막 으로이 문제에 대한 해킹이 아닌 대답은 분명히 받아 들여야합니다!
php_nub_qq

17

이것은 빠른 답변입니다. 재부팅 후 설정되지 않은 로케일을 설정합니다. 먼저 bash 파일을 열고 편집하십시오.

nano .bashrc

파일에 다음 줄을 추가하십시오.

export LC_ALL="en_US.UTF-8"
export LANG="en_US.UTF-8"
export LANGUAGE="en_US.UTF-8"

bash를 다시로드하여 변경 사항을 활성화하십시오.

source ~/.bashrc

시험 결과 :

locale

나를 위해 일하는 유일한 사람, Raspbian 및 우분투 서버 16.04 :)
Liso

13

우분투에서는 이것을 사용하십시오.

#export LANGUAGE=en_US.UTF-8
#export LC_ALL=en_US.UTF-8
#export LANG=en_US.UTF-8
#export LC_TYPE=en_US.UTF-8

나를 위해 일했다.


그것은 또한 파일의 모든 내용을 제거 /etc/default/locale하고 vars의 정의 만 가져오고 (단어 내보내기 제거) 서버를 다시 시작함으로써 나에게
효과적이었습니다.

12

당신이 사용하는 경우 맥 OS X의 v10.10 서버 리눅스에 연결하는 위 (요세미티) 또는 다음 단계를 시도 할 수 있습니다.

  1. 파일을 / etc / ssh / sshd-config 원본으로 유지

  2. ~ / .bash_profile을 착용하십시오

    export LANG="en_US"
    export LC_ALL=$LANG.UTF-8
  3. 운영

    dpkg-reconfigure locales

    그리고 "en_US.UTF-8"을 선택하십시오


10
sudo nano /etc/locale.gen

사용하려는 로캘의 주석 처리를 제거하십시오 (예 : en_US.UTF-8 UTF-8 :

그런 다음 다음을 실행하십시오.

sudo /usr/sbin/locale-gen

출처 : http://people.debian.org/~schultmc/locales.html


미국에서 일하는 회사는 해외 고객이있는 git 서버를 호스팅합니다. GB 군중은 ssh를 통한 git 클론이 로케일 차이로 인해 문제가 있다고 불평했습니다. 이것은 서버에 적용되어이 문제를 해결했습니다.
Therealstubot

10

/etc/default/locale, logout, login 에서 로케일을 적절히 구성한 다음 일반 명령을 실행해야합니다.

root@host:~# echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale
root@host:~# exit
local-user@local:~$ ssh root@host
root@host:~# locale-gen en_US.UTF-8
root@host:~# dpkg-reconfigure locales

4
이 단계는 나를 위해 일했습니다 (Ubuntu 서버 14.04). 요점은 로그 아웃하고 다시 로그인하는 것이 었습니다.
liberborn

9
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory

해결책:

이것을 시도하십시오 ( uk_UA.UTF-8 은 현재 로케일입니다. 예를 들어 en_US.UTF-8 !

sudo locale-gen uk_UA.UTF-8

이.

sudo dpkg-reconfigure locales

이 작업을 수행하고 다시 설치 한 후 문제가 해결되었습니다.
madprops

8

나를 위해 .bashrc 파일 추가 내보내기를 편집하는 동안이 오류를 수정했습니다. 초기 코멘트 후에 추가하십시오.

언어 지원을 추가하십시오.

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_TYPE=en_US.UTF-8

종류 레 가드,


6

올바른 로케일을 추가 ~/.bashrc, ~/.bash_profile, /etc/environment그것에서 설정을 무시로 등이 문제를 해결할 것입니다, 그러나 그것은, 권장하지 않습니다/etc/default/locale 최상의 혼란, 그리고 최악의에서 일관되게 적용되는 로케일 발생할 수 있습니다.

대신 /etc/default/locale직접 편집해야하며 다음과 같이 보일 수 있습니다.

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=en_US

다음에 로그인 할 때 변경 사항이 적용됩니다. 다음 /etc/default/locale과 같이 소싱하여 기존 셸에서 새 로캘을 가져올 수 있습니다 .

$ . /etc/default/locale

1
이 단계 후에 시스템을 다시 시작해야합니다
Ghanshyam Bagul

"/etc/locale.gen"에서 원하는 로케일로 간단히 주석을 달고 다음을 실행할 수 있습니다.locale-gen
Dave Everitt

5

MacOS High Sierra의 iTerm2.app에서 DigitalOcean 또는 다른 Cloud 호스팅 제공 업체에 연결하고 일부 명령에서이 오류가 발생하는 사용자 :

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "en_US.UTF-8"
  are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").

이것은 나를 위해 문제를 해결했습니다.

여기에 이미지 설명을 입력하십시오

나는이 스레드가 오래되었다는 것을 알고 있지만 누군가가 이것을 유용하게 사용할 수 있습니다. 나는 이것이 얼마나 성가신 일인지 안다.


그렇습니다 iterm2에서이 설정이었습니다! 감사!
Brian Olsen

4

허용 된 답변에 따라 :

LANG = C SSH 헌터 2.

LC_ALL = C ssh 헌터 2

클라이언트 쪽에서 나를 위해 트릭을했습니다.


"LANG = C"만으로는 충분하지 않지만 OSX 10.10.3에서 나를 위해 일했습니다. 고마워 알렉스!
Christian

4

zsh ohmyzsh를 사용하여 이것을 다음에 추가했습니다 .zshrc.

 # You may need to manually set your language environment
 LANGUAGE=en_US.UTF-8
 LANG=en_US.UTF-8
 LC_CTYPE=en_US.UTF-8
 LC_ALL=en_US.UTF-8

라인을 제거함으로써 export LANG=en_US.UTF-8

새 탭을 다시 열고 SSH를 사용하여 나를 위해 일했습니다 :)


3

추가 LC_ALL="en_GB.utf8"/etc/environment재부팅. 그게 다야.


2

언제나처럼, 악마는 자세하게 설명되어 있습니다 ...

맥 OS X의 v10.7.5 (사자), 일부 수정하는 장고 내에서 오류를 ~/.bash_profileI의 한 세트 :

export LANG=en_EN.UTF-8
export LC_COLLATE=$LANG
export LC_CTYPE=$LANG
export LC_MESSAGES=$LANG
export LC_MONETARY=$LANG
export LC_NUMERIC=$LANG
export LC_TIME=$LANG
export LC_ALL=$LANG

그리고 오랫동안 Perl을 사용할 때 그 경고가 나타납니다.

내 잘못이야! 내가 훨씬 나중에 깨달았 듯이 내 시스템은 en_US.UTF-8! 나는 단순히에서 변경하여 고정

export LANG=en_EN.UTF-8

export LANG=en_US.UTF-8


2

이전의 모든 답변이 잘못되었습니다. 메시지가 명확합니다-로케일이 없습니다. 해결책은 적절한 로케일을 추가하는 것입니다. /etc/locale.gen 파일을 편집하여 누락 된 것으로보고 된 로케일 앞에있는 # 기호를 제거한 후 다음 명령을 실행하여이를 수행하십시오.

$ sudo locale-gen

이것은 실제로 /etc/locale.gen에 지정된 로케일을 생성하므로 메시지가 표시되지 않습니다.


이것은 단순히 대답은 나를 위해 고대 데비안 (6)에서 일했다. 나머지는 모두 복잡하고 약간 복잡합니다.
Dave Everitt

2

필자의 경우 debian8.6을 사용하여 설정을 변경해야했습니다.

/etc/ssh/ssh_config ...에 대한 #AcceptEnv LANG LC_*

sshd_config에 대한#SendEnv LANG LC_*

그런 다음 ssh 서비스를 다시 시작하십시오.

마침내

locale-gen en_US.UTF-8dpkg-reconfigure locales


2

.bash_profile에 누락 된 로케일 추가

echo "export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8">>~/.bash_profile

그런 다음 .bash_profile을 소싱하십시오.

source ~/.bash_profile

1

제 경우에는 이것이 출력이었습니다.

LANGUAGE = (unset),
LC_ALL = (unset),
LC_PAPER = "ro_RO.UTF-8",
LC_ADDRESS = "ro_RO.UTF-8",
....

해결책은 다음과 같습니다.

sudo locale-gen ro_RO.UTF-8

1

ssh기본적으로 LC 로캘 변수를 덮어 씁니다. 참조 /etc/ssh/sshd_config:

AcceptEnv LANG LC_*

따라서 로컬 쉘에서 이러한 변수를 설정해야 할 수도 있습니다.


1

나를 위해 Ubuntu 16.04 (Xenial Xerus)에서 다음이 작동했습니다.

root@host:~#locale-gen en_GB.UTF-8
root@host:~#localectl set-locale LANG=en_GB.UTF-8,LC_ALL=en_GB.UTF-8

그런 다음 재부팅하십시오 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.