시스템 : python 3.4.2 on linux.인쇄 문에서 파이썬 'ascii'인코딩 문제
나는 장고 응용 프로그램 (무관)에 woring거야, 나는 그것이 인쇄가 호출
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
을 던져 문제가 발생하여 (!). 파고 꽤 후, 나는 내가 확인해야 발견했다
하지만 예상대로, utf8. 유니 코드 문자열과 함께 사용할 때 os.path.exists
이 동일한 예외를 throw합니다. 확인 했으니
>>> sys.getfilesystemencoding()
'ascii'
LANG=en_US.UTF-8
을 사용했을 때 문제가 사라졌습니다. 나는 왜 지금 os.path.exists
에 문제가 있는지 이해합니다. 하지만 파일 시스템 설정의 영향을받는 이유는 무엇인지 print
에 대한 단서가 전혀 없습니다. 제가 놓친 세 번째 설정이 있습니까? 아니면 모든 것을 신뢰할 수있는 환경이 LANG
이라고 가정합니까?
기타 ... 여기에는 이유가 없습니다. LANG
은 파일 이름이 지원하는 인코딩을 알려주지 않습니다. 그것은 그 일과 관련이 없습니다. 파일 시스템이 아닌 현재 환경에 대해 별도로 설정됩니다. 파이썬이 파일 시스템 파일 이름에이 설정을 사용하는 이유는 무엇입니까? LANG
이 설정되어 있지 않거나 C
으로 설정된 환경에서 실행될 때 모든 파일 작업이 중단되므로 응용 프로그램이 매우 약해집니다 (특히 웹 응용 프로그램이 루트로 실행되거나 새 사용자가 데몬 용으로 특별히 작성된 경우)).
테스트 코드 (단말 부호화 함정을 방지하는 데 필요한 실제 유니 입력)
x=b'\xc4\x8c\xc5\xbd'
y=x.decode('utf-8')
print(y)
질문 :
- 가
LANG
설정으로 강력한 애플리케이션을 만드는 좋은 허용 된 방법이 ? - 파일 시스템 드라이버 대신 파일 시스템 기능을 추측 할 실제 이유가 있습니까?
print
은 왜 영향을 받습니까?
'sys.stdout.encoding'은 무엇으로 설정되어 있습니까? –
@MartijnPieters 오, 그건 내가 찾고있는 대답의 일부입니다. 그것은 'ANSI_X3.4-1968'입니다. 겁나게 하는. 그러나 그것은 왜 LANG에서 추측 된 파일 이름 인코딩이냐고 묻습니다. – orion
'LANG'은 POSIX 로케일의 모든 것을 지시합니다 : [Debian은 내 파일 시스템이 ISO-8859-1로 인코딩되었다고 생각합니다] (http://unix.stackexchange.com/q/145580) –