살아가는 이야기

Python 2.7 한글 처리 본문

컴퓨터, 풀어그림

Python 2.7 한글 처리

우균 2013. 7. 10. 01:22

Microsoft Windows에서 Python 한글 출력 문제로 인터넷을 검색해 보면 십중팔구는 coding 지시자를 쓰라는 말이 나온다. Python 코드 앞부분에 아래와 같이 쓰라는 말이 나온다.

#-*- coding: euc-kr -*-

또 프로그램 내에서 한글 문자열을 쓸 때, 유니코드라는 것을 나타내기 위해서 u를 붙이라는 말이 나온다. 즉 아래와 같이 코딩해야 한다는 것이다.

def main():
    name = raw_input(u"이름은? ")
    print name+u"씨 반갑습니다."

if __name__ == '__main__':
    main()

이상과 같이 수정하면 잘 동작하는 것을 Python 2.7 + PyScripter 2.5.3 환경에서 확인하였다.

그러나 위와 같이 수정해도 문제가 다 해결된 것은 아니다. 왜냐하면 같은 프로그램을 명령 프롬프트에서 수행하면 오동작하기 때문이다. 오히려 명령 프롬프트에서는 아래와 같이 수정해야 제대로 동작한다.

def main():
    name = raw_input(u"이름은? ".encode('euc-kr'))
    print name+"씨 반갑습니다."

if __name__ == '__main__':
    main()

그런데 이렇게 수정하면 이번에는 PyScripter에서 제대로 동작하지 않는다.

도대체 무엇이 문제일까? 한참을 검색하다가 default encoding이 문제라는 것을 알았다. Python의 기본 인코딩은 ascii인데 이것을 수정해 주어야 한다. 그러나 환경 변수를 바꿔보고 별 짓을 다 해 봐도 이것을 바꿀 수 없었다. 해답은 의외의 곳에 있었는데 Python이 설치된 폴더의 Lib 폴더에서 site.py에서 찾을 수 있었다. 이 파일을 열어서 setencoding() 함수를 찾아 첫 번째 if 문의 조건을 0에서 1로 변경해 준다(아래 그림 참고).

그러면 위에서 적었던 두 파일 모두 잘 동작한다.

속이 다 시원하네~!

 

Comments