python2.7 urllib2 抓取新浪乱码

中的:

报错的异常是
UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte sequence

此问题,还是很具有代表性的,此处,专门整理如下:

【Python中如何处理UnicodeDecodeError和UnicodeEncodeError】

简答:

1.仔细分析错误的类型

2.搞清自己处理的字符串是什么类型的

3.然后换用这种的字符编码去编码或解码

详解:

以上面的错误:

UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte sequence

为例,去解释,如何处理这类问题:

1.仔细分析错误的类型

(1)错误是Unicode的编码还是解码

对于此处,错误是:

UnicodeDecodeError
的类型的。

此英文,对应的中文的含义,其实已经很清楚了:

Unicode的解码(Decode)出现错误(Error)了

而对于上面这句,我们可以推断出:

你当前正在处理某种编码类型的字符串
此处你要处理字符串,是想要将该字符串去解码decode,变成Unicode
但是将该字符串解码变成Unicode期间,却出错了

(2)所用的是何种编码

好的,接着看上面的错误:

‘gbk’ codec can’t decode
使得错误信息更加明显了:

你此处,要将字符串解码为Unicode,是以gbk编码的方式去解码(该字符串变成Unicode)的
但是此处通过gbk的方式,却无法解码(can’t decode )
注:此处的codec,意思是:编解码(器),是Python内部的模块,用来编码或解码(字符串)的

(3)错误位置

bytes in position 2-3

此处的信息,后续一般也很少用到。

有时候会用于定位具体错误的位置。

此处暂且忽略。

(4)错误的细节错误类型

illegal multibyte sequence

翻译为中文为:

非法的,多字节,序列

简单说就是:

没法(解码)了。

【原因及解决办法】

好了,针对于上面所分析出来的信息:

将一个字符串,通过gbk的方式,去解码,想要获得Unicode字符串,结果出错了

我们来说说原因和解决办法:

此种错误,有几种可能:
(1)要处理的字符串本身不是gbk编码,但是你却以gbk编码去解码
比如,字符串本身是utf-8的,但是你却用gbk去解码utf-8的字符串,所以结果不用说,则必然出错

则必然会出现这类的错误,说是,用gbk的方式去解码字符串,想要获得Unicode字符串,但是结果却解码出错了

解决办法:

如果你确定当前字符串,比如抓取网页通过charset=utf-8,已经确定html的字符串是utf-8的,

则可以直接去通过utf-8去解码。

相关参考内容:

详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等)

中的:

【整理】关于HTML网页源码的字符编码(charset)格式(GB2312,GBK,UTF-8,ISO8859-1等)的解释

而如果本身对于所处理的字符串,不太清楚是什么编码类型的,可以尝试去通过chardet等模块,去检测看看:

【教程】如何用Python中的chardet去检测字符编码类型

然后搞清楚了,确定了,字符串是什么类型,然后再去解码。

提示:

关于字符串编码的类型,作为背景学习知识,也应该去了解一下。

这样对于以后处理字符串方面,会更有帮助。

(2)你没有主动的去将字符串编码为对应的Unicode,但是结果也报上面的UnicodeDecodeError的错误

这个情况,最常见的,就是我之前在:

【总结】Python 2.x中常见字符编码和解码方面的错误及其解决办法

所整理过的:

“Python中,打印字符串时,字符串本身的编码,与输出终端中所用编码不匹配”

此处不再赘述,只简要再说一下:

如果你本身拿到的是utf-8等,非gbk编码的字符串,然后用print去打印出来

在windows系统就是输出到cmd中

而cmd中,(对于多数中国人所用的是中文的系统)默认字符编码是gbk

从而导致此种现象:

python要将utf-8编码的字符串,在gbk的cmd的中打印出来

所以先要去尝试,用gbk的编码,解码为Unicode然后再打印出来

结果就出现此处的错误了。

详细解释,还是参见上面的教程。

其中还有示例代码的。

(3)处理的字符的确是gbk的,但是其中夹杂的部分特殊字符,是gbk编码中所没有的
如果有些特殊字符是GB18030中有的,但是是gbk中没有的。
则用gbk去解码,去所不支持的字符,也比如会出错。
所以,此种情况,可以尝试用和当前编码(gbk)所兼容的但所包含字符更多的编码(gb18030)去解码,或许就可以了。

提示:

如果对于GBK,GB18030,以及GB2312不了解,则可参考:

字符编码简明教程

另外:

如果遇到其他的,类似此中错误的,比如:

UnicodeEncodeError: 'gbk' codec can't encode character u'\u3232' in position 0: illegal multibyte sequence
等类型的错误,你就可以按照上述的思路,去分析,错误的现象,原因,然后通过自己,就可以找到解决办法了。

注:

其他和这类错误相关的,也还有一些可以参考的:

【总结】静态网页抓取,动态网页抓取,模拟登陆的注意事项和心得

中的:“返回的html内容是乱码”

转载于:https://www.cnblogs.com/superroshan/p/6347142.html

python读取文件解码失败相关推荐

  1. python读取文件失败解决方案

    python读取文件失败解决方法 我的目录如下 python/text_files/pi_digits.txt python/text_files/file_reader.py 1. python默认 ...

  2. python读取文件路径中有中文_转 python 读取中文文件名/中文路径

    原博文 2015-03-13 22:22 − python直接读取中文路径的文件时失败,可做如下处理: inpath = 'D:/work/yuanxx/在线导航/驾车导航/walk_log/2013 ...

  3. python将文件另存为,python读取文件另存为

    解决 python 读取文件乱码问题(UnicodeDecodeError) 解决 python 读取文件乱码问题(UnicodeDecodeError) 确定你的文件的编码,下面的代码将以'utf- ...

  4. Python读取文件中文乱码问题

    Python读取文件,遇到中文会出现乱码问题,这里需要进行手动编码解码: # coding=utf-8file_path = r'D:\Python27_Workspace\files\learnin ...

  5. Python读取文件编码及内容

    Python读取文件编码及内容 最近做一个项目,需要读取文件内容,但是文件的编码方式有可能都不一样.有的使用GBK,有的使用UTF8.所以在不正确读取的时候会出现如下错误: UnicodeDecode ...

  6. python读取文件第n行-python读取文件第n行

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. pos = pos - 1 try: f.seek(pos, 2) #从 ...

  7. python读取文件第n行-Python读取文件后n行的代码示例

    这篇文章主要介绍了Python实现读取文件最后n行的方法,涉及Python针对文件的读取.遍历与运算相关操作技巧,需要的朋友可以参考下# -*- coding:utf8-*- import os im ...

  8. python中读取文件内容-Python读取文件内容的三种常用方式及效率比较

    本文实例讲述了Python读取文件内容的三种常用方式.分享给大家供大家参考,具体如下: 本次实验的文件是一个60M的文件,共计392660行内容. 程序一: def one(): start = ti ...

  9. python读取文件-python读取大文件

    最近在学习python的过程中接触到了python对文件的读取.python读取文件一般情况是利用open()函数以及read()函数来完成: f = open(filename,'r') f.rea ...

最新文章

  1. Last_Error: Relay log read failure: Could not parse relay log event entry.
  2. 实例方法-扩展器-生命zhou
  3. 常考数据结构与算法:进制转换
  4. PyCharm 安装详细图片(linux)版
  5. python类class定义_python基础教程之类class定义使用方法
  6. 专供PNG免抠设计素材好地方,做设计到搜图114
  7. drop table可以删除多张表吗_delete、truncate、drop 有啥区别?该怎么选择?
  8. 网络的高可用性(一)
  9. em表示什么长度单位_CSS的长度单位(em)与em标签
  10. C# 判断圆与矩形的冲突
  11. 笔记本计算机无法开机怎么办,笔记本开机按了没反应 笔记本电脑开不了机怎么办...
  12. Superl-url:一款开源关键词URL采集工具
  13. 面向对象编程思想 以及类与对象
  14. 中国象棋棋盘c语言编程,中国象棋 C语言编程.ppt
  15. Qt · 密码输入框检测并显示大写锁定键已打开
  16. mt2503[SMS] 手机无法发出短信
  17. 计算机代码清单目录,搜索文件夹并生成目录清单
  18. 贴吧顶贴php脚步,贴吧干货:利用代码无限顶贴
  19. 微信可以识别哪些HTML语言,微信小程序一些常用标签与HTML的对应关系
  20. 手机串码查询 手机指令大全

热门文章

  1. 有关架构图你需要了解的基础知识
  2. 左耳朵耗子:程序员如何把控自己的职业?
  3. 每个程序员都应该挑战的6个项目
  4. 面试官上来就问:Java 进程中有哪些组件会占用内存?
  5. 从coding走向管理
  6. 别吵吵,分布式锁也是锁
  7. 微服务网关哪家强?一文看懂Zuul, Nginx, Spring Cloud, Linkerd性能差异
  8. vscode 一些基本知识
  9. 身份验证——《跟我学Shiro》
  10. Java集合:数组的使用