2014-02-10 3 views
4

제 문제는 유니 코드 문자를 터미널에 출력 할 수 있지만 파일에 출력 할 수는 없다는 것입니다. 데모 : "로케일"의파이썬으로 파일에 유니 코드 쓰기

[email protected]:~$ python -c 'print u"\u5000"' 
倀 
[email protected]:~$ python -c 'print u"\u5000"' >a.out 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u5000' in position 0: ordinal not in range(128) 

출력 : 터미널이 UTF-8을 사용하도록 설정되어

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 

답변

3

때문에, 파이썬은 터미널에 직접 기록 할 때 유니 코드 문자를 인코딩하는 방법을 알고있다. 그러나 파일에 쓸 때 인코딩이 지정되지 않으므로 파이썬은 기본적으로 ASCII로 설정됩니다. 파일에 쓰려면 명시 적으로 바이트 인코딩을 지정해야합니다.

python -c 'print u"\u5000".encode("UTF-8")' >a.out 
1

실제로 문제는 파이썬에서 발생했습니다. 해결책은 PYTHONIOENCODING = utf_8로 설정되었습니다.

관련 문제