2017-12-16 14 views
0

장고 UnicodeDecodeError/nginx를

locale.getlocale() 
locale.getdefaultlocale() 
sys.getfilesystemencoding() 
sys.getdefaultencoding() 

manage.py shell를 통해 실행하면, 내 로케일에 맞는 어떤

('en_US', 'UTF-8') 
('en_US', 'UTF-8') 
utf-8 
utf-8 

를 얻을 : 그러나

LANG=en_US.UTF-8 
LANGUAGE=en_US: 
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 

요청은 아파치/Nginx에 의해 처리 : 생산

(None, None) 
(None, None) 
ascii 
utf-8 

이로 인해 내 사이트 전체에 여러 가지 UnicodeDecodeErrors가 발생하고 불일치 이유를 찾지 못했습니다. Apache 용 AddDefaultCharset utf-8 또는 Nginx 용 charset utf-8;을 설정해도 문제가 해결되지 않았습니다.

+2

웹 서버에서 별도의 사용자로 실행됩니다. 해당 사용자의 로켈을 설정해야합니다. 더 튼튼한 접근 방식은 어쨌든 로케일에 의존하지 않아야합니다. 파일을 열거 나 인코딩 할 때 인코딩을 명시 적으로 선언하십시오. 각 경우 인코딩 선택을 제어해야하는 사용자 : 환경 (환경 선택이 현명하지 않은 경우 런타임시 인코딩 오류가 발생할 수 있음) 또는 인터페이스? – lenz

+0

나는 수동으로 인코딩을 시도 할 것이다. 여전히 Apache와 Nginx는 같은 로케일을 가진 www-data에 의해 실행됩니다. – Bitbart

+0

소리가 이상합니다. 파이썬이 입출력을위한 기본 인코딩에 어떻게 도달했는지 모든 세부 사항을 이해하지 못한다는 것을 인정해야한다. 나에게있어서 그 (것)들에 의지하지 않는 다만 다른 이유이었다. – lenz

답변

0

이 솔루션은 /etc/apache2/envvars에 숨겨진 :

## The locale used by some modules like mod_dav 
export LANG=C 
## Uncomment the following line to use the system default locale instead: 
. /etc/default/locale