Python2.7.9 编码问题
最近学一学网络爬虫,遇到第一件头疼的事情就是编码问题, 看了很多教程讲得不清楚, 现在整理一下,希望以后查看方便一些
使用 sys.getdefaultencoding() 查看Python的默认系统编码,输出是 ascii , 这个编码应该是指的源文件的编码格式, 可以另存为的方式改成utf-8, 不过为了避免每个文件都另存为,可以在...Python27\Lib\site-packages目录下新建一个文件sitecustomize.py,里面加入以下几行,将默认编码设置为utf-8 的格式
# encoding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
这个时候打开Python Shell 用 sys.getdefaultencoding() 检查编码格式会得到utf-8
使用 content = urllib2.urlopen(url) 打开一个网页并得到网页内容,如果要将这个content字符串输出, 会报错: [Decode error - output not utf-8] ,在Python中字符串类型可以使用 type()来查看, 分为 str 和 Unicode两种
>>> s = '中文'
>>> print type(s)
<type 'str'>
>>> t = u'中文'
>>> print type(t)
<type 'unicode'>
其中 str 类型在Linux系统下默认编码是utf-8, 那么字符串在输出之前就应该编码为utf-8, 如果为gbk编码,就应该使用 retVal = retVal.decode('gbk').encode('utf8') 转换为utf-8格式才能正常输出. 在Windows下的默认编码是gbk编码, 所以输出前必须为gbk编码.
有时候爬取一个网页, 在meta 和 header 里面没有说明编码格式, 这时可以使用 chardet 模块来检测文件的编码格式
import chardet
f = open('save.html','r')
fencoding = chardet.detect(f.read())
print fencoding
上面的代码输出样式为: {'confidence': 0.99, 'encoding': 'utf-8'} ,可以知道打开的文件编码格式为utf-8的.
最新文章
- Centos7 and docker practices
- [转载]抓包,端口镜像,monitor session命令(转)
- 基于阿里云容器服务用docker容器运行ASP.NET 5示例程序
- 如何调试DLL组件
- POJ 1066 Treasure Hunt(计算几何)
- Python实践之(七)逻辑回归(Logistic Regression)
- iOS 9 之后更改状态栏字体颜色
- 直接将视频文件原码流转换成YUV,输出到屏幕显示
- hadoop参数配置
- View 的measure 和onMeasure
- JavaScript替换HTML标签
- android中xml tools属性详解(转)
- Android ViewManger解析 从ViewRoot 源码分析invalidate
- Android连续点击多次事件的实现
- [AMD驱动]解决AMD驱动的1603错误
- Confluence 6 重要缓存和监控
- 使用自定义端口连接SQL Server 的方法
- js实现网页tab选项卡切换效果
- php 抽象 继承 多态
- Spark读取结构化数据