鱼C论坛

 找回密码
 立即注册
查看: 7985|回复: 51

[作品展示] 一次性解决你所有的编码检测问题

[复制链接]
最佳答案
214 
发表于 2015-11-8 03:07:29 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在日常使用中,我们难以避免会遇到编码转换问题。(如果编码是什么都不知道,请先看:什么是编码?

而进行编码转换的前提是你知道这个字符串使用的是什么编码。

比如你使用 urllib.request.urlopen() 获取一个网页时,你特么如果不知道网页的编码会怎样?
7.gif

直接 read().decode() 就可能会出现下边错误:

BaiduShurufa_2015-11-8_2-8-2.png

这是因为无论是 encode() 还是 decode(),默认采取的编码/解码都是 encoding="utf-8" 编码……

虽然你大 UTF-8 行迹踏遍天下,但在这神州大地,处处都有奇葩的好不?
4.gif

这时候需要一个可靠的方式来检测字符串到底是什么编码,这样我们才能对症下药!


这里小甲鱼向大家推荐一个不错的模块:chardet,使用它就可以检测字符串的编码。

chardet 模块可以检测以下编码:

  • ASCII, UTF-8, UTF-16 (2 variants), UTF-32 (4 variants)
  • Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (Traditional and Simplified Chinese)
  • EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP (Japanese)
  • EUC-KR, ISO-2022-KR (Korean)
  • KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic)
  • ISO-8859-2, windows-1250 (Hungarian)
  • ISO-8859-5, windows-1251 (Bulgarian)
  • windows-1252 (English)
  • ISO-8859-7, windows-1253 (Greek)
  • ISO-8859-8, windows-1255 (Visual and Logical Hebrew)
  • TIS-620 (Thai)


chardet 模块安装方法:

1. (推荐)使用 pip 安装,打开命令行窗口(Windows 的 cmd,Linux 的 terminal,Mac 的“终端”)

输入命令:pip install chardet

BaiduShurufa_2015-11-7_17-11-0.png


2. 下载安装包并解压: chardet-2.3.0.tar.gz (160.49 KB, 下载次数: 989)

评分

参与人数 10荣誉 +43 鱼币 +38 贡献 +21 收起 理由
和vvv + 1 + 1 支持楼主!
Ruide + 2 + 2 + 1 支持!
yongxi + 5 + 5 + 3 好东西!!
H.B.F + 5 + 5 + 3 热爱鱼C^_^
梦想绘制者 + 5 + 5 + 2 热爱鱼C^_^
疾风。意破天晴 + 5 感谢楼主无私奉献!
不二如是 + 5 + 5 + 3
wangguohui + 5 + 5 + 3 支持楼主!
叶子宏 + 5 + 5 + 3 热爱鱼C^_^
林斌 + 3

查看全部评分

本帖被以下淘专辑推荐:

最佳答案
0 
发表于 2015-11-8 18:28:17 | 显示全部楼层
甲鱼哥给力
最佳答案
2 
发表于 2015-11-9 15:58:57 From FishC Mobile | 显示全部楼层
学习了
最佳答案
3 
发表于 2015-11-10 15:39:53 | 显示全部楼层
觉得只提供了些资源而已,还是要通过自身的判断。。。
最佳答案
0 
发表于 2015-11-16 20:51:11 | 显示全部楼层
然而,encode的时候出问题了:
捕获.JPG
最佳答案
0 
发表于 2015-11-30 20:35:29 | 显示全部楼层
谢谢小甲鱼!
最佳答案
0 
发表于 2016-3-2 11:49:01 | 显示全部楼层
我早看到就好了,之前写爬虫的时候各种编码问题
最佳答案
2 
发表于 2016-3-2 11:51:17 | 显示全部楼层
最佳答案
0 
发表于 2016-7-19 17:30:30 | 显示全部楼层
学习了
最佳答案
0 
发表于 2016-7-19 18:39:35 | 显示全部楼层
学习了
最佳答案
0 
发表于 2016-7-20 14:02:52 | 显示全部楼层
>>> file = rq.urlopen("http://www.sina.com")
>>> html = file.read()
>>> chardet.detect(html)
{'confidence': 0.0, 'encoding': None}
检查新浪的网页编码,为啥是None,而且可信度为0
甲鱼哥哥,这是为啥了
最佳答案
0 
发表于 2016-7-27 12:38:41 | 显示全部楼层
楼主,您好:
        我就按照第二个方法安装的chardet,而且安装成功,刚开始可以导入到python里,当我重新打开IDLE时,import chardet,显示不存在,请问这是什么原因?谢谢大家
最佳答案
0 
发表于 2016-7-27 16:22:57 | 显示全部楼层
最佳答案
3 
发表于 2016-7-29 14:06:53 | 显示全部楼层
学习啦,之前写爬虫可是为了这个编码问题头疼半天了
最佳答案
0 
发表于 2016-8-2 10:21:57 | 显示全部楼层
学习到了!
最佳答案
0 
发表于 2016-8-16 21:24:44 | 显示全部楼层
很有帮助
最佳答案
0 
发表于 2016-9-16 10:16:21 | 显示全部楼层
Python 神奇的地方真是太多!
最佳答案
0 
发表于 2016-9-21 16:00:14 | 显示全部楼层
赞一个
最佳答案
0 
发表于 2016-12-1 11:42:40 | 显示全部楼层
灰常棒棒哒
最佳答案
1 
发表于 2016-12-22 23:04:42 | 显示全部楼层
厉害了
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号 )

GMT+8, 2018-7-17 21:01

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表