Python Standard Output의 Encoding 문제 해결
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
공사