• python在windows下UnicodeDecodeError的解决方法


    之前在windows下使用python调用某些模块时都会报错,像这样:

    C:Documents and SettingsAdministrator>python -m CGIHTTPServer
    Traceback (most recent call last):
      File "C:Python27lib
    unpy.py", line 162, in _run_module_as_main
        "__main__", fname, loader, pkg_name)
      File "C:Python27lib
    unpy.py", line 72, in _run_code
        exec code in run_globals
      File "C:Python27libCGIHTTPServer.py", line 30, in <module>
        import SimpleHTTPServer
      File "C:Python27libSimpleHTTPServer.py", line 27, in <module>
        class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
      File "C:Python27libSimpleHTTPServer.py", line 208, in SimpleHTTPRequestHand
    ler
        mimetypes.init() # try to read system mime.types
      File "C:Python27libmimetypes.py", line 358, in init
        db.read_windows_registry()
      File "C:Python27libmimetypes.py", line 258, in read_windows_registry
        for subkeyname in enum_types(hkcr):
      File "C:Python27libmimetypes.py", line 249, in enum_types
        ctype = ctype.encode(default_encoding) # omit in 3.x!
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 9: ordinal
    not in range(128)

    可以看到栈跟踪一直指向了python目录下的libmimetypes.py文件,根据查到的资料,解决方法是这样的

    找到mimetypes.py文件第256行左右的default_encoding = sys.getdefaultencoding(),在它的前面加上

    if sys.getdefaultencoding() != 'gbk': 
                reload(sys) 
                sys.setdefaultencoding('gbk')  

    if和default_encoding对齐,然后问题就解决了,详细原理等我深入了解了再补充过来

  • 相关阅读:
    10003 Cutting Sticks(区间dp)
    Cocos2d-x init() 和 onEnter() 区别
    HDU1181【有向图的传递闭包】
    空间参考系统与WKT解析
    面试经典-分金条
    uvalive 3971
    lua学习:使用Lua处理游戏数据
    面试经典--两个房间 每间房间三盏灯
    浙江大学PAT上机题解析之2-11. 两个有序链表序列的合并
    顺序队列之C++实现
  • 原文地址:https://www.cnblogs.com/piaomiao1314/p/3818259.html
Copyright © 2020-2023  润新知