2010-04-29 2 views
13

동일한 프로젝트에 대해 Windows 및 Linux 컴퓨터를 사용하고 있습니다. Windows에서 stdin의 기본 인코딩은 cp1252이고 Linux에서는 utf-8입니다.파이썬에서 stdin 인코딩을 변경하는 방법

모든 것을 uft-8로 변경하고 싶습니다. 가능합니까? 내가 어떻게 해?

감사 에두아르도

답변

18

당신은 일을 인쇄 할 때 암시 적 인코딩에 의존하지 않음으로써이 작업을 수행 할 수 있습니다. 이것에 의존하지 않는 것이 좋습니다. 암시 적 인코딩은 stdout에 인쇄 할 때와 stdout이 터미널에 연결된 경우에만 사용됩니다.

더 나은 방법은 어디서나 unicode을 사용하고 codecs.open 또는 codecs.getwriter을 사용하는 것입니다. 당신은 예를 들어, 사용하여 자동으로 UTF-8로 유니 코드 문자열을 인코딩 객체에 sys.stdout을 포장 : 당신이 사방에 유니 코드를 사용하는 경우에만하지만, 작동

sys.stdout = codecs.getwriter('utf-8')(sys.stdout) 

. 따라서 모든 곳에서 유니 코드를 사용하십시오. 정말로, 도처에.

+0

표준 입력란은 어떻게됩니까? – duduklein

+2

표준 입력은 자동으로 디코딩되지 않으므로 항상 직접 처리해야합니다. 그리고 입력이 UTF-8이라고 가정하면 나쁜 생각 일 수 있습니다. 그러나 정말로 원한다면'codecs.getreader ('utf-8') (sys.stdin) '이 있습니다. –

+0

Python 2와 달리 Python 3은 실제로 stdin을 자동으로 해독합니다. http://docs.python.org/3/library/sys.html#sys.stdin -이 동작은 문서에서 설명한대로 변경할 수 있습니다. –

12

이것은 오래된 질문이지만 참조 용입니다.

사용 stdin에서 UTF-8를 읽으려면 :

UTF8Reader = codecs.getreader('utf8') 
sys.stdin = UTF8Reader(sys.stdin) 

# Then, e.g.: 
for _ in sys.stdin: 
    print _.strip() 

stdoutUTF-8 쓰기 사용하려면

UTF8Writer = codecs.getwriter('utf8') 
sys.stdout = UTF8Writer(sys.stdout) 

# Then, e.g.: 
print 'Anything' 
6

파이썬은 자동으로 표준 입력의 인코딩을 감지합니다.

pipeline | PYTHONIOENCODING="UTF-8" /path/to/your-script.py 

더 감지를 인코딩에 대한 정보와 다른에이 변수를 들면 : 나는 자동 감지가 제대로 작동하지 않는 인코딩을 지정 발견하는 가장 간단한 방법은 다음의 예에서와 같이, PYTHONIOENCODING 환경 변수를 사용하는 것입니다 플랫폼에서는 sys.stdin 설명서를 볼 수 있습니다.

관련 문제