python做为最优雅的语言之一一直倍受你们的青睐。它能够帮你从单调重复的工做解脱出来,好比统计各类蛋疼的数据,导入导出boss须要的表格等等。你要作的是编写、运行python脚本,而后喝个茶水等着运行结果就行了。html
这篇文章就是这样产生的----在我使用scrapy爬取数据的时候,遇到了python 2.x 中文字符编码的问题,之前对这个问题也是只知其一;不知其二,此次再次遇到说明要还债了,去搞清楚字符编码究竟是怎么一回事。python
首先,咱们须要明确在计算机中全部信息最终都是使用二进制表示的,每一个二进制位(bit)有0和1两种状态,8个二进制位被称为一个字节(byte),能够表示256种状态。数据库
做为计算机领域的先驱,美国在上世纪60年代制定了一套字符编码,使用二进制来表示英文字母、数字及一些符号,这套字符编码就是ASCIIjson
随着计算机的发展,很快有了其余语言的编码需求,单字节的ASCII编码因为能表示的字符有限,已经不能知足需求了。为了避免与ASCII编码冲突,有能力的国家开始设计单独的编码----使用更多的字节表示字符,中国制定了gb2312数组
可是,随之而来的是字符编码方案数量增长带来的一系列问题。所以,Unicode应运而生。它把全部语言的字符都用同一种字符集来表示,解决了因不一样字符编码方案带来的一系列问题bash
先给你们来一个简单的🌰,比较常见scrapy
文件test.py内容:ui
#!/usr/bin/python
city = '京'
print city
复制代码
运行python test.py,结果如图:编码
经过修改test.py默认编码方式解决spa
#!/usr/bin/python
# -*- coding: utf-8 -*-
city = '京'
print city
复制代码
看过了🌰,再来看看str和unicode
str和unicode都是basestring的子类。可是,严格来讲unicode是真正意义上的字符串,str是字节码----由unicode通过编码后的字节组成的序列。 上个截图,消除你们的疑惑,s == s2
经过这个🌰,理解str和unicode的区别,妈妈不再担忧处理中文字符时出现乱码或报错了(不管是unicode转str,仍是str转unicode),还要避免以下操做
说了这么多,show me you code (斜眼笑)🌰:
#!/usr/bin/python
# -*- coding: utf-8 -*-
u_z = u'京'
s_z = '京'
u=u'jing'
s='jing'
print u_z
print s_z
print repr(u_z)
print repr(s_z)
print '=================='
print u
print s
print repr(u)
print repr(s)
print '=================='
print u.decode()
print s.encode()
print u_z.decode()
print s_z.encode()
复制代码
#!/usr/bin/python
# -*- coding:utf8 -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
复制代码
好了,这就是我对python2.x 中文字符编码的一些理解,但愿能够帮到你
未经本人容许,不得转载。文章有疏漏浅薄之处,请各位大神斧正