2012-08-03 2 views
6

나는 다음과 같은 파이썬 스크립트가 : 그것은왜 로케일 설정이이 UnicodeError를 수정하지 않습니까?

export LC_ALL=en_US.utf8 
작동 내가 명시 적으로 쉘에서 LC_ALL 환경 변수를 설정할 때, 그러나

肥皂 
Traceback (most recent call last): 
    File "../pycli/samples/x.py", line 5, in <module> 
    print u'肥皂' 
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256) 

:

# -*- coding: utf-8 -*- 
import sys, locale 
locale.setlocale(locale.LC_ALL, 'en_US.utf8') 
print '肥皂' # This works 
print u'肥皂' 

내가 얻을 스크립트를 실행

그래서 왜 setlocale() 같은 효과가 없는지 궁금하네요?

+0

'en_US.utf-8'을 사용해 보셨습니까? –

+0

그래, 내가 그걸 시도했지만 동일한 결과를 – trinth

+0

하려고했습니다. 인코딩 ('utf-8') 귀하의 출력? –

답변

2

이 값은 인터프리터를 시작할 때 출력 할 기본 charset을 지정하는 데만 사용됩니다. 즉, 스크립트가 실행되고 실행되면 너무 늦었습니다.

+0

그런 경우 왜이 방법이 존재합니까? 내 유일한 옵션은 수동으로 환경 변수를 설정하는 것 같습니다. – trinth

1

유니 코드는 프로그램 내부에만있는 텍스트 개념 개념과 같습니다.

모든 문자를 지원할 수있는 장점이 있지만 그대로 출력 할 수 없으므로 표시 할 수있는 인코딩으로 인코딩해야한다는 단점이 있습니다.

그래서 약간의 입력을 원한다면 인코딩이되어서 해독해야하며, 유니 코드를 출력하려면 인코딩해야합니다.

만약 당신이 그것을하지 않으면, 파이썬은 당신을 위해 그것을하려고 시도 할 것입니다 (아스키를 사용하거나, 당신의 경우와 같이 env에서 찾을 수 있습니다),하지만 당신은 이것을 의지해서는 안됩니다. 왜냐하면 파이썬이 잘못되었을 수 있기 때문입니다 (귀하의 경우).

아주 재미있게, 당신의 경우 터미널이 utf8을 지원하지만, 파이썬은 utf8을 사용할 수 있다는 것을 깨닫지 못했습니다.

당신이해야 항상 인코딩 출력과 입력을 디코딩 왜 그게 전부 (가능한 바람직 UTF8을 사용!) 당신이, 유니 코드 인코딩 방법과 문자열 디코딩 방법을 사용하여 그들에게 인수로 인코딩을 제공 달성 할 수

.

관련 문제