作家
登录

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

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

答复第一个问题:str类型到底是什么

windows上(默认终端编码为gbk):

  1. >>> s = '严' 
  2.  
  3. >>> s 
  4.  
  5. '\xd1\xcf' 

Linux上(默认终端编码为utf-8):

  1. >>> a = '严' 
  2.  
  3. >>> a 
  4.  
  5. '\xe4\xb8\xa5' 

同样一个汉字,同样都是Python中的str类型,在不合的编码格局下,其二进制是不一样的。是以,其长度也是不一样的,对于str类型,其长度是对应的字节长度。

也能看出gbk编码的字节长度一般小于utf-8,这也是gbk持续存在的一个原因。

这里,要强调一下,unicode的二进制情势是与终端的编码格局无关的!这个也不难解得。

unicode函数

str类型到unicode类型的转换,出了膳绫擎提到的str.decode,还有一个unicode函数。两个函数的签名为:

  1. >>> import sys,locale 
  2.  
  3. >>> sys.getdefaultencoding() 
  4.  
  5. 'ascii' 
  6.  
  7. >>> locale.getdefaultlocale() 
  8.  
  9. ('zh_CN''UTF-8'
  10.  
  11. >>> sys.stdin.encoding 
  12.  
  13. 'UTF-8' 
  14.  
  15. >>> sys.stdout.encoding 
  16.  
  17. 'UTF-8' 
  18.  
  19. >>> sys.getfilesystemencoding() 
  20.  
  21. 'UTF-8' 
  1. unicode(object[, encoding[, errors]]) 
  2.  
  3. Return the Unicode string version of object using one of the following modes:  
  4.  
  5. str.decode([encoding[, errors]]) 
  6.  
  7. Decodes the string using the codec registered for encoding. encoding defaults to the default string encoding. 

二者参数雷同,事实上二者是等价的,encoding的默认值也是一样的,都是sys.getdefaultencoding()的结不雅。for example:

  1. s='中文' 
  2.  
  3. us=unicode(s) 

第一个UnicodeDecodeError,就是因为体系默认的编码是asill吗;第二个UnicodeDecodeError,是因为,s(str类型的实例)的编码取决于终端默认编码(即windows下的gbk),为了能打印出来,也就必须用gbk编率攀来表示这个str,是以只能萌芽gbk与unicode的映射表将s转换成unicode类型。

为啥调用sys.setdefaultencoding

在诸多Python代铝闼楝都邑看到这么一段:

不难猜想,setdefaultencoding跟getdefaultencoding是配对的,为啥要将体系的默认编码设置成utf-8,其实就是解决str到unicode的转换问题。

上一末节已经提到过,应用unicode函数将str类型转换成unicode类型时,要推敲两个身分:第一,str本身是什么编码的;第二,如不雅没有传入encoding参数,默认应用sys.getdefaultencoding。encoding参数必须与str本身的编码对应,不然就是UnicodeDecodeError。

  1. unicode(object[, encoding[, errors]]) 
  2.  
  3. Return

      推荐阅读

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

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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