python 2.7에서 한글 문제 어떻게 해결하나요?

2013-01-16 17:16

python 2.7에서 utf-8 인크딩으로 한글 사용하려면 print(u"한글")과 한글 문자 앞에 u를 사용해야 되네요. 삽질 좀 했는데 무슨 방법을 써도 한글이 깨지더군요.

3.x 대는 한글 문제가 좀 해결된 듯 한데 2.7에서는 아직 이슈가 좀 있는 듯 하네요. 혹시 python 대가님들 있으면 해결 방법 좀 공유해 주세요.

한글 쓸 때마다 u를 입력해야 된다면 이건 정말 끔찍한데요. 설마 이렇게 개발하지는 않으리라 생각하는데요.

현재 PyScripter로 http://partialrecall.tistory.com/10 문서 참고해서 다른 이슈는 모두 해결했음다. 콘솔 출력에서 한글이 계속 깨지는데 문자 앞에 u 붙이니 정상 동작하더군요.

5개의 의견 from SLiPP

2013-01-16 17:33

음, 모르고 계실 것 같지는 않지만 혹시나... 파이썬 코드 맨 위에

\# -*- coding:utf-8 -*-

한 줄 추가하면 됩니다. 이걸로 안 되면 다른 환경적인 문제일텐데, 그 때는 봐야 할 듯.

2013-01-16 18:10

@greatkit #-*- coding: utf-8 -*- 을 추가하면 작성한 소스코드를 유니코드로 인식하기는 하지만 그렇다고 문자열이 유니코드로 취급되는 건 아닙니다. 여전히 문자열을 1바이트 문자로 취급합니다. 예를 들어 len('초코파이')는 8이지만 len(u'초코파이')는 4로 나오죠. 즉 #-*- coding: utf-8 -*-로 소스 코드가 한글임을 표기하고 터미널의 로케일을 조정해서 한글이 표시되도록 했다고 해도 무척 깨지기 쉬운, 즉 국제화가 덜 된 프로그램이 만들어지게 됩니다.

2013-01-16 18:18

@fupfin @greatkit 맞습니다. 한글 이슈 해결하려고 열나 삽질했네요.

-*- coding: utf-8 * 도 추가하고 설정도 바꾸고 생쇼를 했는데도 한글은 깨지더군요.

@fupfin님이 말한 이슈가 맞습니다. 인코딩 설정을 해도 문자열은 여전히 1바이트 문자로 인식하는 듯 합니다. 검색해서 찾다가 한글 앞에 u를 추가하니 해결되더군요. 근데 이건 너무 무식한 해결 방법이라는 생각이 들어서 다른 방법이 있지 않을까 생각했음다.

2013-01-17 01:27

@fupfin @자바지기 제가 읽고 싶은 것만 읽어봤나 봅니다. 아무튼 많이 배웠습니다.

다시 읽어보니 스트링 리터럴 앞에 u 붙이는 것 때문에 그러셨던 것 같은데, 저는 처음부터 파이썬에서 (유니코드) 스트링 표현할 때 'u' 를 붙이는 습관을 들여서 그랬는지 별로 끔찍하다는 생각을 해 본 적이 없네요.

u 를 붙여서 유니코드 스트링임을 명시, u 없으면 아스키코드... 뭐 그렇게 받아들이고 살고 있었기에.

생각하기에 따라서 u 를 붙여야 하는 것이 마음에 안 들 수 있겠다 싶기도 하고, 저도 그렇게 보이기도 하고...

@자바지기 아, 그리고 아시다시피... 파이썬 2.x 대하고 3.x 는 '전혀' 다르다고 보셔도 무방합니다.

의견 추가하기

연관태그

← 목록으로