zoukankan      html  css  js  c++  java
  • Python2.7 编码问题解决方案

    编码问题,可以说是Python中最让人头痛的问题了。

    本质上是, 含有特殊编码(非ASCII码)原始字符串流与Unicode对象之间的转换问题。

    考虑如下情境:

    来自文件或者来自网络的,一个含有特殊字符的原始字符串流 x, 与一个unicode字符串相加

    addStr = x + u'Python2.7 编码' 

    系统在执行上面这个表达式的时候会产生哪些动作?

    答案:

    1) 原始字符串流与unicode相加, 先会把原始字符串流转成unicode对象,然后再与另外一个unicode对象加。 表达式x会被系统转成一个unicode对象

    2) x 被转成unicode对象,翻译成术语就是“x被系统解码成unicode对象”。 那系统用什么编码类型来解码? 当然是系统默认编解码方式来解码。

    可以通过:

    import sys
    
    print sys.getdefaultencoding()

    来查看系统默认编码(默认的是ASCII码方式

    3)想想,如果x不含有特殊字符,那么用系统默认的编码ASCII码解码,当然没问题。可是,如果x含有特殊字符, ASCII码当然不能识别特殊字符,当然就报错了。

    报错该怎么解决?

    答案:

    (首先你应该知道x原本是哪种编码的,这应该不难吧。)

    1)在 x 与 u'Python2.7 编码' 相加的时候,手动为x解码,采用x里面字符本身的编码方式,如 ‘utf-8’或者 ‘gb2312’ 或者其他

    addStr = x.decode('utf-8') + u'Python2.7 编码'

    2) 另外一种方式便是,一开始就重设系统默认编码为你指定的类型 ’utf-8’ 或者 ‘gb2312’  或者其他

    import sys
    
    reload(sys)
    
    sys.setdefaultencoding('utf-8')

    ---------------------------------------------------------------------------------------------------------------------

    对于编码的解释,大概如上。给出完整的解决方案如下:

    1) 保证工程.py文件本身都是utf8无BOM编码模式,如果不是,请手动转成utf8 without BOM

    2) py文件开头设置编码头部, # –*- coding:utf8 –*-

    3)重新设置系统编码,在工程开始的时间点:

    import sys
    
    reload(sys)
    
    sys.setdefaultencoding('utf-8')

    4)在有特殊字符的字符串前面添加 u字符,注明为unicode对象字符串

    ------------------------------------------------------------------------------------------------------------------------

    遵循上面给出的方案,就不会被编码的问题反复折腾。 仅仅是个人的一点点工作中的经验。

     

    (注: Python3.x之后,系统默认编码是utf8)

  • 相关阅读:
    什么是 Native、Web App、Hybrid、React Native和Weex?
    什么是 Native、Web App、Hybrid、React Native和Weex?
    线性表—使用链表实现
    Twins:眼红红
    产品中心
    Koa 学习
    乐山大佛
    Ftp Centos · GitBook
    install jekyll
    MIZ702N开发环境的准备1
  • 原文地址:https://www.cnblogs.com/fengde/p/5056689.html
Copyright © 2011-2022 走看看