• Sublime和Python中文编码的一些问题


    Windows下的控制台中,应该是这样的逻辑:

    1、如果是Unicode字符串的话,首先根据控制台编码进行转换

    2、之后进行输出

    所以在Windows控制台下,假设str = u'中文',

    1、直接print str是可以正确输出的

    2、print str.encode('gbk')或者print str.encode('gb2312')是正确输出的

    3、print str.encode('utf-8')是输出乱码

    在Windows系统下的Sublime Text中,假设str = u‘中文',

    1、如果直接print str的时候,会提示

    'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

    这是因为它试图用系统默认编码(Windows下默认是ascii)去对Unicode字符串进行encode,碰到中文肯定是失败的

    2、如果print str.encode('utf-8')是可以在Sublime Text中正确输出的

    3、如果pirnt str.encode('gbk')或者print str.encode('gb2312'),会提示

    [Decode error - output not utf-8]

    可能是因为Sublime Text只接受utf-8的输出吧

    总结上述流程,Sublime Text的流程应该是

    1、判断字符串是否是Unicode

    2、如果是的话,就先对其用系统默认编码来进行encode

    3、判断字节串是否是utf-8编码,如果是的话,就输出

    为了解决Windows下Sublime Text这个问题,可以通过以下两种办法:

    1、将以下代码加到程序的头部

    import sys
    default_encoding = 'utf-8'
    if sys.getdefaultencoding() != default_encoding:
        reload(sys)
        sys.setdefaultencoding(default_encoding)

    网上有说插入到sublime_plugin.py中,但是试验了一下,不行

    2、在系统环境变量中添加PYTHONIOENCODING(大小写无所谓),值为utf-8

    这样子,当想输出中文的时候,直接print str,str是Unicode字符串,这样子无论是在Sublime Text还是控制台中都是正确的结果了!

    注:

    chardet可以用来检测文件编码,还有codecs模块用来做编码相关的一些工作,以下这篇文章可以作为文件编码相关问题的参考

    Python字符编码问题,chardet,codecs

    参考文章:

    PYTHON-进阶-编码处理小结

  • 相关阅读:
    【52】目标检测之检测算法
    【51】目标检测之特征点检测
    6-----Scrapy框架中Item Pipeline用法
    5-----Scrapy框架中Spiders用法
    4-----Scrapy框架中选择器的用法
    3-----Scrapy框架的命令行详解
    1-----Scrapy框架整体的一个了解
    Python入妖5-----正则的基本使用
    win安装wordcloud报错解决方案
    在新项目下使用rbc权限
  • 原文地址:https://www.cnblogs.com/summerwinter/p/4115806.html
Copyright © 2020-2023  润新知