본문 바로가기

Prog.Lang. or Query/Jython

LookupError: unknown encoding 949


py2exe시 unknown encoding: cp949 대한 대처.

Windows2000, python 2.3.3 환경입니다.
9x나 NT,XP는 테스트 안 해봤습니다.

'cp949' 엔코딩 사용시 파이썬스크립트상태로 실행하면 아무런 문제가 없습니다.
하지만, py2exe로 패키징하여 실행하면 에러가 납니다.
encoding 패키지를 강제로 포함시켜도 말이죠.
perky, exman 님등에 물어본 결과 py2exe로 실행하면 lib\site.py 를
자동으로 임포트하지 않아서 생기는 문제인 것 같다고 합니다.

가장 손쉬운 해결방법은 'mbcs' 엔코딩을 사용하는 겁니다.
이 경우 스크립트나 py2exe도 모두 실행 잘 됩니다.
문제는 리눅스나 타 OS에서 mbcs 엔코딩을 인식하지 못한다는 겁니다.
물론 윈도에서만 쓸거라면 고집하면 모르겠지만 python의 멀티플랫폼지원이 빛을 바래겠죠?

그러면 cp949를 윈도상에서 쓸 경우 py2exe시 에러유형을 보겠습니다.

유형 A.
아래와 같은 코드가 포함된 소스를 execfile()로 실행하면
코드:
# -*- coding: cp949 -*-

아래의 에러메시지를 만나게 됩니다.
코드:
SyntaxError: 'unknown encoding: cp949'


유형 B.
다음 코드 같은 경우
코드:
unicode(mi18n.Msg.AutoUpdate,'cp949').encode('cp949')

아래의 에러메시지를 만나게 됩니다.
코드:
LookupError: unknown encoding: cp949


해결법.
유형A,B 모두 CJKcodecs를 설치해야합니다.
CJKcodecs 는 여기서 다운로드 :
http://cjkpython.i18n.org/index-ko.html

해결 A.
execfile() 를 실행하기전에 다음과 같이 임포트합니다.
코드:
from cjkcodecs import aliases

그리고 py2exe 실행시 다음과 같은 옵션으로 CJKcodecs 패키지를 강제로 추가합니다.
py2exe가 자동으로 추가해주지않는군요.
코드:
--packages encodings,cjkcodecs


해결 B.
'cp949' 엔코딩을 사용하기 전에 다음과 같이 임포트합니다.
코드:
from cjkcodecs import multibytecodec, mapdata_ko_KR, cp949, _cp949, aliases

참고로 이건 테스트해보지않았습니다. 아마도 될듯..
안되면 py2exe시 위와 같이 옵션을 추가해 보세요.

참고로, 어제(2월13일) CJKPython2.3.3을 perky 님께서 릴리즈했네요.
cjkcodecs 패키지를 아예 python23h.dll 에 포함시켜서 위와 같이 복잡하게 생각안해도 된다는군요.

Python2.4에 기본으로 포함된다니 2.4가 빨리 출시되기를 기다려겠네요.

지금 CJKPython2.3.3으로 바꿔서 테스트하러 갑니다.. 캬캬캬.


출처 : http://python.kr/