写python代码的法度榜样都知道,我们要在py文件第一行写上:
- # -*- 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,直接打印
例子就是膳绫擎反复提到的例子
- >>> ss = us.encode('utf-8')
- >>> print ss
- 涓
如不雅一个str类型来自收集或者文件攫取,最好先按照对端encode的方法先decode成unicode,然后再输出(输出的时刻会主动转换成期望终端支撑的编码格局的str)
编码范围无法包含的汉字
直接上例子
- >>> newus = u'囍'
- >>> newus
- u'\u56cd'
- >>> newus.encode('gbk')
- '\x87\xd6'
- >>> newus.encode('gb2312')
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- UnicodeEncodeError: 'gb2312' codec can't encode character u'\u56cd' in position 0: illegal multibyte sequence
- >>>
可以看到,‘囍’字可以被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
1/2 1

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