美文网首页
Python2.x的中文显示方法

Python2.x的中文显示方法

作者: 上发条的树 | 来源:发表于2016-06-02 17:38 被阅读465次

    Python的默认编码

    Python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,Python的处理常常会报这样的错:

    UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128),
    

    Python没办法处理费ascii编码的,此时需要自己设置将Python的默认编码,一般设置为utf-8的编码格式。
    查询系统默认编码可以在解释器中输入以下命令:

    >>> import sys
    >>> sys.getdefaultencoding() 
    'ascii'
    

    临时更改编码

    设置默认编码时使用:

    >>> sys.setdefaultencoding('utf8')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'module' object has no attribute 'setdefaultencoding'
    

    发现报错。
    需要先执行reload(sys),再执行以上命令就可以顺利通过了:

    >>> reload(sys)
    <module 'sys' (built-in)>
    >>> sys.setdefaultencoding('utf8')
    >>> sys.getdefaultencoding()
    'utf8'
    

    此时在执行sys.getdefaultencoding()就会发现编码已经被设置为utf8的了,但是在解释器里修改的编码只能保证当次有效,在重启解释器后,会发现,编码又被重置为默认的ascii了,那么有没有办法一次性修改程序或系统的默认编码呢?

    两种方法设置Python的默认编码

    1、在程序中加入以下代码:

    import sys 
    reload(sys) 
    sys.setdefaultencoding('utf8')  
    

    2、在python的Lib\site-packages文件夹下新建一个sitecustomize.py,内容为:

    # encoding=utf8 
    
    import sys   
    reload(sys) 
    sys.setdefaultencoding('utf8')  
    

    重启python解释器,执行sys.getdefaultencoding(),发现编码已经被设置为utf8的了,多次重启之后,效果相同,这是因为系统在python启动的时候,自行调用该文件,设置系统的默认编码,而不需要每次都手动的加上解决代码,属于一劳永逸的解决方法。

    还有一种解决方案是在程序中所有涉及到编码的地方,强制编码为utf8,即添加代码encode("utf8"),这种方法并不推荐使用,因为一旦少写一个地方,将会导致大量的错误报告.

    ps:方法2中,如何找到python的Lib\site-packages文件夹?方法如下:

    >>> import sys
    >>> import pprint
    >>> pprint.pprint(sys.path)
    ['',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC',
     '/Library/Python/2.7/site-packages']
    

    可以看到,最后一个即为我们要寻找的文件夹路径。

    相关文章

      网友评论

          本文标题:Python2.x的中文显示方法

          本文链接:https://www.haomeiwen.com/subject/sajkdttx.html