파이썬 2.3에서는 본격적으로 소스코드 인코딩을 지원하기 시작해서 이제 소스코드 안에서도 u’한글’ 이런식으로 C 처럼 한글을 유니코드로 바로 쓸 수 있게 되었습니다. 그런데, 인터랙티브 인터프리터 환경에서는 무조건 ISO-8859-1로 인식해 버리는 바람에, euc-kr 터미날에서는 이런 사태가 벌어집니다.
1 2 3 4 |
>>> u'한글' u'\xc7\xd1\xb1\xdb' >>> import sys;sys.stdin.encoding 'eucKR' |
분명히 stdin의 인코딩은 euckr인데! 그걸 갈갈이 쪼개서 iso-8859-1로 넣어버리는 것인데, 사실 50명이 넘는 파이썬 개발자 중에서 iso-8859-1로 쓸 수 없는 모국어를 가진 사람은 2~3명밖에 안 되는 터라, 아무도 사실을 모르고 2.3에서 넘어간 것 같기도 하고.. (사실 iso-8859-1을 변수이름에 쓸 수 있는 꽁수도 있습니다. 흑흑 -.-…)
하여간, 그래서 이 문제를 해결하기 위해서 좀 삽질을 해 본 결과, 인터랙티브 인터프리터는 1줄씩 Parser/tokenizer.c의 tok_nextc함수에서 tok->prompt가 != NULL일 경우에 들어가는 루프에서 처리되는데, 파일에서 소스를 읽는 경우는 StreamReader로 처리하고 있는 반면에, 프롬프트에서 읽을 때는 전혀 디코딩 처리를 안 하고 있어서 결국은 iso-8859-1로 하고 있는건데, 일단 decode->encode하도록 약간 수정을 해서 트래커를 제출했습니다. 소스 파일에서 읽을 때는 Stream으로 읽은데 반해, 프롬프트에서 읽을 때는 조각 조각 디코드, 인코드를 하도록 했기 때문에, hzgb같은 행간 시퀀스가 있는 경우에는 완전한 지원이 불가능하지만, 사실상 그런 인코딩을 터미날에서 쓰는 사람은 없다고 봐도 괜찮다는 판단으로 그냥 저렇게 만들었습니다. -ㅇ-; (hzgb를 대체 어떻게 지원하지!;;)
아직 리뷰는 안 되었으니, 혹시 2.4 쓰고 계신 분들은 패치를 받으셔서 한번 테스트해봐 주세요 (처음 테스트를 도와주신 nohmad님께 감사~)
1 2 3 4 5 |
>>> u'한글' # 기본으로 euc-kr이나 utf-8같은 로캘을 쓴다면 유니코드 직접 쓰기 가능 u'\ud55c\uae00' >>> import sys;sys.stdin = open("configure") >>> u'한글' # sys.stdin이 stdin이 아닌 다른 것으로 교체된 경우에는 iso-8859-1로 폴백. u'\xc7\xd1\xb1\xdb' |
또 필요하면 언제든 불러주세요~ 몰모트가 되어 드릴께요~ ^^;
잘 되네요. ^^ ~x86? 젠투입니다 ~_~ 2.3.3-r1
근데 사실 이게 뭔지 잘 모르겠.. (흑)
오웃. 나이누님도 감사 +_+ 🙂
꿀벌 감소 이야기는 미쿡 이야기
-ㅁ- 송화가루 최고최고 -ㅅ-;; 콧구녕에 들어노는거 같아요 -ㅅ-;
소나무는 원래 꿀벌의 도움을 받지 않는 나무라서 가루가 날리는 거 아니었어요?
음.. 그렇게 심각하게 쓴 얘기는 아니고, 그냥 괜한 화풀이(?) 였지요.. 흐흐;
흐흐 ;;
꿀벌없어지고 4년뒤엔 사람도 없어진다고 들은것 같은데…
음 차 유리창이 뿌옇게 되서 보니까 먼지가 아닌 송화가루;
안녕하세요 혜식님… 미투에서도 뵙군요 ^^ 항상 블로그에서 좋은정보 잘 보고 있습니다