Python之路 困扰已久的编码问题

近日帮一个老师做了个针对文本的统计分析的项目,我主要负责把文本数据爬取下来并进行基本处理。其实在这个项目之前,我在学习文本挖掘的时候就意识到了编码问题的麻烦......而之前一直没有重视这个问题,这次趁着这个机会,来总结一下我遇到的编码问题。这里大家要注意,Python3据说在编码上表现好多了,但是毕竟用了这么久Python2,而且为了了解下编码知识,这里还是要总结的。

1.  # -*- coding: utf-8 -*-
 如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCII编码,而需要知道的是,python3已经默认是utf-8编码了(我准备转python3了...)

2.来看一个有趣的东西:

 

#! /usr/bin/env python
# -*- coding: utf-8 -*-  a = ['你是真的皮', '今晚吃鸡'] b = [u'你是真的皮', u'今晚学习'] print a print b print a[0] print b[0] 

你猜会输出什么??  我们来看看:

 

 

['\xe4\xbd\xa0\xe6\x98\xaf\xe7\x9c\x9f\xe7\x9a\x84\xe7\x9a\xae', '\xe4\xbb\x8a\xe6\x99\x9a\xe5\x90\x83\xe9\xb8\xa1']
[u'\u4f60\u662f\u771f\u7684\u76ae', u'\u4eca\u665a\u5b66\u4e60'] 你是真的皮 你是真的皮

第一个问题:为什么打印一个元素就可以显示中文,打印列表就要以某种编码显示?

 

第二个问题:a,b中文相同为什么用列表打印出来编码不同?

 

 

 

 

3.遇到最多的问题:

先来看看这三行代码

 

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

 

这个东西可谓是解决编码问题的杀手锏,基本上来说当你遇到下面这句话的时候

 

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

只要用上面三行代码就搞定了。为什么呢???

 

 

 


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值