首页 > 代码库 > setuptools " UnicodeDecodeError:"问题探究
setuptools " UnicodeDecodeError:"问题探究
Q:在安装setuptools时Python ez_setup.py,或者安装其他egg包,有时候会碰到: UnicodeDecodeError错误,这是为什么呢?
安装setuptools时UnicodeDecodeError错误
<span style="font-family:SimSun;"> mimetypes.init() # try to read system mime.types File "C:\Python27\lib\mimetypes.py", line 358, in init db.read_windows_registry() File "C:\Python27\lib\mimetypes.py", line 258, in read_windows_registry for subkeyname in enum_types(hkcr): File "C:\Python27\lib\mimetypes.py", line 249, in enum_types ctype = ctype.encode(default_encoding) # omit in 3.x! UnicodeDecodeError: 'ascii' codec can't decode byte 0x83 in position 8: ordinal not in range(128) Something went wrong during the installation. See the error message above.</span>
安装xlrd时UnicodeDecodeError错误
<span style="font-family:SimSun;"> mimetypes.init() # try to read system mime.types File "C:\Python27\lib\mimetypes.py", line 358, in init db.read_windows_registry() File "C:\Python27\lib\mimetypes.py", line 258, in read_windows_registry for subkeyname in enum_types(hkcr): File "C:\Python27\lib\mimetypes.py", line 249, in enum_types ctype = ctype.encode(default_encoding) # omit in 3.x! UnicodeDecodeError: 'ascii' codec can't decode byte 0x88 in position 1: ordinal not in range(128)</span>
UnicodeDecodeError错误原因分析
从Traceback来看是函数mimetypes.init(),在进行ascil解码时,抛出了异常了,查看mimetypes.py源代码,下面是错误发生的地方。
<span style="font-family:SimSun;">default_encoding = sys.getdefaultencoding() with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, '') as hkcr: for subkeyname in enum_types(hkcr): try: with _winreg.OpenKey(hkcr, subkeyname) as subkey: # Only check file extensions if not subkeyname.startswith("."): continue # raises EnvironmentError if no 'Content Type' value mimetype, datatype = _winreg.QueryValueEx( subkey, 'Content Type') if datatype != _winreg.REG_SZ: continue try: mimetype = mimetype.encode(default_encoding) subkeyname = subkeyname.encode(default_encoding) except UnicodeEncodeError: continue self.add_type(mimetype, subkeyname, strict)</span>
我想现在大家已经明白了UnicodeDecodeError错误原因,就是注册表HKEY_CLASSES_ROOT下的子key存在不能用当前系统默认的asci编码解码时抛出UnicodeEncodeError错误。
建议解决策:
- 清理注册表HKEY_CLASSES_ROOT中,含有当前ASCI以外字符的key
- 抛弃Python2.7.6,改用Python2.7.7
P.S这是python2.7.6的一个bug,Python2.7.7已经修改了。
http://bugs.python.org/issue9291
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。