Python 응용 프로그램에 대한 Ubuntu 로캘이 잘못되었습니다.

Python 응용 프로그램에 대한 Ubuntu 로캘이 잘못되었습니다.

Amazon EC2의 Ubuntu AMI에 NGINX -> UWSGI -> Django(python) 스택이 설치되어 있습니다. 이름에 유니코드 문자가 포함된 파일에 액세스할 때 문제가 발생했습니다. Django 앱(메자닌)의 정확한 출력은 다음과 같습니다.

경로에 유니코드 문자가 포함된 파일에 액세스를 시도했지만 현재 로캘이 utf-8을 지원하지 않습니다. 'LC_ALL'을 올바른 값(예: 'en_US.UTF-8')으로 설정해야 할 수도 있습니다.

이제 명령을 실행하면 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

나에게는 모든 것이 괜찮아 보였으므로 다음으로 오류를 생성하는 코드 섹션에서 로케일 설정을 인쇄하는 일부 코드를 추가했습니다.

그 결과는 다음과 같습니다.

locale.getdefaultlocale() = (None, None)
locale.getpreferredencoding() = 'ANSI_X3.4-1968'
sys.getdefaultencoding() = 'ascii'
sys.getfilesystemencoding() = 'ANSI_X3.4-1968'

그래서 그것은 잘못된 것처럼 보이지만 어떻게 고치는지 잘 모르겠습니다. Python 셸에서 동일한 코드를 실행하면 모든 것이 훨씬 좋아 보입니다.

locale.getdefaultlocale() = ('en_US', 'UTF-8')
locale.getpreferredencoding() = 'UTF-8'
sys.getdefaultencoding() = 'ascii'
sys.getfilesystemencoding() = 'UTF-8'

그래서 내 유일한 생각은 nginx 및 uwsgi 부분 어딘가에 로케일이 제대로 설정되지 않았다는 것입니다. 어쨌든 둘 중 하나가 특정 로케일을 사용하도록 강제할 수 있나요? 아니면 사용자와 관련된 문제일 수 있나요? nginx 및 uwsgi를 실행하는 사용자는 셸에서 해당 명령을 실행하는 데 사용한 사용자와 다릅니다.

관련 정보