答复第一个问题:str类型到底是什么
windows上(默认终端编码为gbk):
- >>> s = '严'
- >>> s
- '\xd1\xcf'
Linux上(默认终端编码为utf-8):
- >>> a = '严'
- >>> a
- '\xe4\xb8\xa5'
同样一个汉字,同样都是Python中的str类型,在不合的编码格局下,其二进制是不一样的。是以,其长度也是不一样的,对于str类型,其长度是对应的字节长度。
也能看出gbk编码的字节长度一般小于utf-8,这也是gbk持续存在的一个原因。
这里,要强调一下,unicode的二进制情势是与终端的编码格局无关的!这个也不难解得。
unicode函数
str类型到unicode类型的转换,出了膳绫擎提到的str.decode,还有一个unicode函数。两个函数的签名为:
- >>> import sys,locale
- >>> sys.getdefaultencoding()
- 'ascii'
- >>> locale.getdefaultlocale()
- ('zh_CN', 'UTF-8')
- >>> sys.stdin.encoding
- 'UTF-8'
- >>> sys.stdout.encoding
- 'UTF-8'
- >>> sys.getfilesystemencoding()
- 'UTF-8'
- unicode(object[, encoding[, errors]])
- Return 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.
二者参数雷同,事实上二者是等价的,encoding的默认值也是一样的,都是sys.getdefaultencoding()的结不雅。for example:
- s='中文'
- 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。
- unicode(object[, encoding[, errors]])
- Return
推荐阅读
能拍照,还能视频通话?coolpad Dynobot儿童智能手表让你惊艳
市面上的绝大部分儿童手表都不能拍照,最大卖点的只是语音通话功能。Dynobot是市面上仅有的配备两个摄像头的儿童手表,支持480P视频通话。表盘30万像素满足孩子自拍需求,顶部200万像素摄像头可以拍孩子看到的任何画>>>详细阅读
本文标题:不想再被鄙视?那就看进来! 一文搞懂Python 2字符编码
地址:http://www.17bianji.com/lsqh/39888.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示