作家
登录

不想再被鄙视?那就看进来! 一文搞懂Python 2字符编码

作者: 来源: 2017-12-18 16:59:26 阅读 我要评论

 the Unicode string version of object using one of the following modes:  
  •  
  • str.decode([encoding[, errors]]) 
  •  
  • Decodes the string using the codec registered for encoding. encoding defaults to the default string encoding. 
  • 写python代码的法度榜样都知道,我们要在py文件第一行写上:

    1. # -*- coding: utf-8 -*- 

    为什么print us.encode(‘utf-8’)打印出“涓”

    这句话的感化在于,告诉编辑器,该文件琅绫擎的所有str都采取utf-8编码,且存储文件的时刻也是应用utf-8格局。

    然后文件中就会应用下面的┞封种代码。

    应用unicode强迫转换的时刻,都不习惯带参数,为了包管encoding参数必须与str本身的编码一致,所以应用setdefaultencoding将体系默认编码设置为utf-8

    乱码与UnicodeError

    下面介绍几种常见的乱码与异常UnicodeError, 大年夜多半乱码或者异常的原因在前面已经讲过了,同时,对于一些乱码,也试图给出可行的解决办法。

    UnicodeError包含UnicodeDecodeError 与UnicodeEncodeError ,前者是decode也就是str转unicode的时刻出了异常,后者则是encode也就是unicode转str的时刻出了异常。

    对于一个str,直接打印

    例子就是膳绫擎反复提到的例子

    1. >>> ss = us.encode('utf-8'
    2.  
    3. >>> print ss 
    4.  
    5. 涓 

    如不雅一个str类型来自收集或者文件攫取,最好先按照对端encode的方法先decode成unicode,然后再输出(输出的时刻会主动转换成期望终端支撑的编码格局的str)

    编码范围无法包含的汉字

    直接上例子

    1. >>> newus = u'囍' 
    2.  
    3. >>> newus 
    4.  
    5. u'\u56cd' 
    6.  
    7. >>> newus.encode('gbk'
    8.  
    9. '\x87\xd6' 
    10.  
    11. >>> newus.encode('gb2312'
    12.  
    13. Traceback (most recent call last): 
    14.  
    15. File "<stdin>", line 1, in <module> 
    16.  
    17. UnicodeEncodeError: 'gb2312' codec can't encode character u'\u56cd' in position 0: illegal multibyte sequence 
    18.  
    19. >>> 

    可以看到,‘囍’字可以被gbk编码,然则不克不及被gb2312编码。

    str转unicode的时刻

    第五:对于收集接口,商定好编解码格局,强烈建议应用utf-8

    在膳绫擎讲unicode函数的时刻已经举过例子,会爆出UnicodeDecodeError 异常。

    这个缺点比较的原因,更多来自str到unicode的默认转换,比如一个str与一个unicode相加的时刻:

    unicode 与 str相加,str会转换为unicode,应用默认的unicode(strobj, encoding = sys.getdefaultencoding())

    看起来向unicode编码的字符串

    某些情况下,我们打印出一个str类型,看到结不雅是’\u4e25’, 或者’u4e25’,对于这个字符串,是不是很眼熟,不错, ‘严‘的unicode编码就是u’u4e25’。细心一看,只是在引号前面多了一个u(表示是一个unicode类型)。那么当我们看到一个’u4e25’的时刻,怎么知道对应的汉字是什么?对于已知的┞封种格局的str,天然可以手动加一个u,然后在终端输出,然则如不雅是一个变量,须要主动转换成unicode呢,这个时刻就可以应用python-specific-encodings中的unicode_escape


      推荐阅读

      能拍照,还能视频通话?coolpad Dynobot儿童智能手表让你惊艳

    市面上的绝大部分儿童手表都不能拍照,最大卖点的只是语音通话功能。Dynobot是市面上仅有的配备两个摄像头的儿童手表,支持480P视频通话。表盘30万像素满足孩子自拍需求,顶部200万像素摄像头可以拍孩子看到的任何画>>>详细阅读


    本文标题:不想再被鄙视?那就看进来! 一文搞懂Python 2字符编码

    地址:http://www.17bianji.com/lsqh/39888.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)