어느 순간 부터, 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):
별 문제가 없는지 모르겠다.