본문 바로가기

Language/python

Windows 7, Python2.7에서의 mimetypes.py의 UnicodeDecodeError 오류

어느 순간 부터, ipython notebook, pip install 등의 명령어를 수행하면 아래와 같이 UnicodeDecodeError 오류가 났다.

나중에 안 사실이지만, mimetypes.py 를 사용하는 모든 파이썬 모듈에서 발생한다.

...

  File "D:\Development\WinPython-64bit-2.7.6.3\python-2.7.6.amd64\lib\SimpleHTTPServer.py", line 27, in <module>
    class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
  File "D:\Development\WinPython-64bit-2.7.6.3\python-2.7.6.amd64\lib\SimpleHTTPServer.py", line 208, in SimpleHTTPRequestHandler
    mimetypes.init() # try to read system mime.types
  File "D:\Development\WinPython-64bit-2.7.6.3\python-2.7.6.amd64\lib\mimetypes.py", line 358, in init
    db.read_windows_registry()
  File "D:\Development\WinPython-64bit-2.7.6.3\python-2.7.6.amd64\lib\mimetypes.py", line 258, in read_windows_registry
    for subkeyname in enum_types(hkcr):
  File "D:\Development\WinPython-64bit-2.7.6.3\python-2.7.6.amd64\lib\mimetypes.py", line 249, in enum_types
    ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 6: ordinal not in range(128)

...


구글링을 해보니, Windows7의 레지스트리 "HKEY_CLASSES_ROOT\MIME\Database\Content Type" 저장된 MimeType 중 Ascii 값이 아닌 문자가 들어있어서 그런거란다. 찾아서 삭제하라고 하는데, 너무 많기도 하고, 귀찮아서 mimetypes.py 를 아래와 같이 수정해 주었다. 위치는 %PYTHONPATH%\lib 에 있다.


변경 전 :

248 : try:

249 :        ctype = ctype.encode(default_encoding) # omit in 3.x!

250 : except UnicodeEncodeError:


변경 후 :

248 : try:

249 :        ctype = ctype.encode(default_encoding) # omit in 3.x!

250 : except (UnicodeEncodeError, UnicodeDecodeError):


별 문제가 없는지 모르겠다.