Python 2.X버전에서 인코딩 시 문제가 생겼던 부분을 해결했다. 


[~]$ python encodingtest.py > std.out

Traceback (most recent call last):

  File "encodingtest.py", line 2, in <module>

    print uni

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)


문제의 핵심은 Python이 standard output의 encoding을 모르는 것이었다. 해결 방법의 핵심은 standard output의 encoding을 지정하는 것이다. "PYTHONIOENCODING=UTF-8"



다음 예제 파일로 테스트 해보았다. 

encodingtest.py

#!/usr/bin/python

uni = u"\uacf5\uc0ac"

print uni



출력을 터미널로 한 예제

[~]$ python encodingtest.py 

공사




출력을 파일로 리다이렉트(redirect)한 예제, 하지만 unicode 출력에서 문제가 생겼다. 이유는 python이 standard output의 encoding을 알지 못해서이다. 

[~]$ python encodingtest.py > std.out

Traceback (most recent call last):

  File "encodingtest.py", line 2, in <module>

    print uni

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)



이럴 땐 환경변수를 통해 encoding이 무엇인지 python 에게 알려주어야 한다. PYTHONIOENCODING 환경변수를 이용하여 인코딩을 지정해주면 해결 된다.

[~]$ PYTHONIOENCODING=UTF-8 python encodingtest.py  > std.out

[~]$ cat std.out

공사




Posted by Picky Kang
,