python编码问题之\"encode\"&\"decode\"
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312’),表示将unicode编码的字符串str2转换成gb2312编码。
当我们想获取网页源代码,并且希望能够以html后缀或者其他格式保存文件的时候,如果不进行编码,那么保存得到的文件在遇到中文时就会出现异常,不便于我们对数据的处理。
requests
首先说一下使用requests请求得到源代码的处理办法。
经过我无数次的实践,发现通过get请求得到的源代码都是“byte”类型,所以每当想都过write写入到文件中时总是会报错。如下:
- #coding=utf-8
- import requests
- r = requests.get('http://www.baidu.com')
- print(type(r.text))
- with open('baidu.html','w') as f:
- f.write(r.text)
输出结果
- >>>
- <, in <module>
- f.write(r.text)
- UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 25364: illegal multibyte sequence
解决办法:示例代码如下
- import requests
- import chardet
- r = requests.get('http://www.baidu.com')
- content = r.text
- print(type(content))
- print(chardet.detect(content.encode('utf-8')))
- with open('baidu.html','w',encoding='utf-8') as f:
- f.write(content.encode('utf-8').decode('utf-8'))
注意chardet是用来查看文字编码类型的,之前想使用下面代码直接查看content的编码类型,但是报错。
- ...
- ...
- print(chardet.detect(content))
- >>>
- Traceback (most recent call last):
- File , , in detect
- raise ValueError('Expected a bytes object, not a unicode object')
- ValueError: Expected a bytes object, not a unicode object
因此需要先通过encode,将content的编码格式转化为utf-8才能查看。。这里还没弄清楚为什么Expected a bytes object, not a unicode object,先放着。
下面说说写入操作。写入操作之前需要制定encoding的方式为utf-8,另外f.write()时还得先把content的编码格式设置成utf-8,然后再通过decode解码,将utf-8格式解码成Unicode格式,即python内置的编码格式,这样就能正常写入了,而且中文正常显示!!!
下面是最上面代码的输出结果。
- >>>
- <class 'str'>
- {'encoding': 'utf-8', 'confidence': 0.99}
- [Finished in 2.3s]
urllib
先写到这~~~
python编码问题之\"encode\"&\"decode\"的更多相关文章
- python中文处理之encode/decode函数
python中文处理相信迷惑过不少同学.下面说说python2/3的encode和decode函数. python2中,使用decode()和encode()来进行解码和编码,以unicode类型作为 ...
- Python字符串的编码与解码(encode与decode)
首先要搞清楚,字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unico ...
- 字符编码和python使用encode,decode转换utf-8, gbk, gb2312
ASCII码 标准ASCII码使用7位二进制数表示大写或小写字母,数字0到9标点符号以及在美式英语中使用的特殊控制字符. 在标准ASCII码中,最高位(b7)用作奇偶校验位,所谓奇偶校验,是指在代码传 ...
- Python编码介绍——encode和decode
在 python 源代码文件中,如果你有用到非ASCII字符,则需要在文件头部进行字符编码的声明,声明如下: # code: UTF-8 因为python 只检查 #.coding 和编码字符串,所以 ...
- python编码encode decode(解惑)
关于python 字符串编码一直没有搞清楚,今天总结了一下. Python 字符串类型 Python有两种字符串类型:str 与 unicode. 字符串实例 # -*- coding: utf-8 ...
- python编码问题 decode与encode
参考: http://www.jb51.net/article/17560.htm 如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCI ...
- Python编码(encode)和解码(Decode)常见的两个错误
项目地址:https://git.io/pytips 0x07 和 0x08 分别介绍了 Python 中的字符串类型(str)和字节类型(byte),以及 Python 编码中最常见也是最顽固的两个 ...
- Python—编码与解码(encode()和decode())
编码与解码 decode英文意思是解码,encode英文原意是编码. Python 里面的编码和解码也就是 unicode 和 str 这两种形式的相互转化.编码是 unicode -> str ...
- Python编码decode和encode
常见编码介绍: GB2312编码:适用于汉字处理.汉字通信等系统之间的信息交换;GBK编码:是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码ASCII编码:是对 ...
随机推荐
- iOS 启动页后广告Demo
重点! 对于启动页后的广告,相信大家也都看到过很多很多的,比如我自己常看到的有 QQ音乐,爱奇艺了.你点击了APP,它会启动就会随之启动..其实这些APP的启动页是没有消失的,你去认真的观察一下!所以 ...
- IOS任务管理之GCD使用
前言: 前天学了IOS的NSOperation基本使用,我们得知NSOperation也是基于IOS GCD(Grand Central Dispatch)实现,其实在做IOS开发中GCD已经基本上能 ...
- jquery与ajax的XMLHttpRequest对象介绍
首先 认识一个对象 这个对象叫XMLHttpRequest XMLHttpRequest对象可以提供在不刷新页面的情况下向服务器发送异步请求,并且接受服务器端返回的结果.从而实现局部更新当前页面的功 ...
- 支持缩放的fresco图片控件 —— fresco sample: ZoomableDraweeView
最近在实现一个类似淘宝中的评论列表的功能,其中要在列表中显示评论图,点击图片后显示大图进行查看,各家app几乎都会有这样的功能. 可以看到,一个体验较好的查看大图的基本功能有, 第一,左右滑动时切换图 ...
- HFun.快速开发平台(二)=》自定义列表实例(请求参数的处理)
上编描述了自定义列表的基本实现功能,本此记录列表的请求过程. 个人比较喜欢对参数进行对象化,方便后续人维护及查看,先上代码: /************************************ ...
- centos7搭建nexus maven私服
前置条件: 1.安装jdk,可参考 http://www.cnblogs.com/grey-wolf/p/6480489.html 2.nexus仓库管理器,分为两个版本,Nexus Reposito ...
- UIView和layer的关系
UIView和layer的关系 UIView是layer的代理 View的根layer ---也就是说view本身自带一个layer, 这个layer 我们叫它根layer 所有视图显示是因为继承UI ...
- Asp.Net 常用工具类之加密——非对称加密RSA算法
踏入程序员这个行业也有几年了,几年中有收获(技术加强),有付出(时间和亚健康状态).当然喏,并不后悔,代码路还长!!! On The Way,永不止步!!! 开发过程中也积累了一些自己的经验.代码块和 ...
- ceph-deploy install时,远端节点在执行apt-get update命令时失败
环境 OS:Ubuntu 16.04 背景 使用ceph-deploy部署Ceph集群,调用ceph-deploy install命令在远端节点安装ceph环境,执行apt-get update命令时 ...
- gulp折腾日记——gulp-livereload
大家好,虽然在博客园注册了很长一段时间,但我还没在博客园写过博客,这是在博客园的第一篇博客,希望能养成每周写博客的好习惯 O(∩∩)O~~) 今天要聊得是gulp的一个实时刷新的插件gulp-live ...