QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

管理员

Rank: 40Rank: 40Rank: 40Rank: 40Rank: 40Rank: 40

技术值
查看: 6241|回复: 47

[技术交流] 一次性解决你所有的编码检测问题

[复制链接]
最佳答案
173 
累计签到:2257 天
连续签到:6 天
小甲鱼 发表于 2015-11-8 03:07:29 624147 | 显示全部楼层 |阅读模式

马上注册加入鱼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, 下载次数: 781)

评分

参与人数 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 
累计签到:38 天
连续签到:1 天
caopeirui 发表于 2015-11-8 18:28:17 | 显示全部楼层
甲鱼哥给力
最佳答案
2 
累计签到:42 天
连续签到:1 天
无名似名 发表于 2015-11-9 15:58:57 From FishC Mobile | 显示全部楼层
学习了
最佳答案
0 
累计签到:555 天
连续签到:1 天
瞬秒爆加速 发表于 2015-11-10 15:39:53 | 显示全部楼层
觉得只提供了些资源而已,还是要通过自身的判断。。。
最佳答案
0 
累计签到:123 天
连续签到:1 天
wing1995 发表于 2015-11-16 20:51:11 | 显示全部楼层
然而,encode的时候出问题了:
捕获.JPG
最佳答案
0 
累计签到:558 天
连续签到:29 天
红枫 发表于 2015-11-30 20:35:29 | 显示全部楼层
谢谢小甲鱼!
最佳答案
0 
累计签到:577 天
连续签到:1 天
Jx0101 发表于 2016-3-2 11:49:01 | 显示全部楼层
我早看到就好了,之前写爬虫的时候各种编码问题
最佳答案
2 
累计签到:122 天
连续签到:1 天
VVFock3r 发表于 2016-3-2 11:51:17 | 显示全部楼层
最佳答案
0 
累计签到:13 天
连续签到:1 天
竞技山 发表于 2016-7-19 17:30:30 | 显示全部楼层
学习了
最佳答案
0 
累计签到:64 天
连续签到:1 天
sunfore 发表于 2016-7-19 18:39:35 | 显示全部楼层
学习了
最佳答案
0 
累计签到:53 天
连续签到:1 天
gaomengsuijia 发表于 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 
累计签到:18 天
连续签到:1 天
18191171661 发表于 2016-7-27 12:38:41 | 显示全部楼层
楼主,您好:
        我就按照第二个方法安装的chardet,而且安装成功,刚开始可以导入到python里,当我重新打开IDLE时,import chardet,显示不存在,请问这是什么原因?谢谢大家
最佳答案
0 
累计签到:23 天
连续签到:1 天
小菜鸟翻身 发表于 2016-7-27 16:22:57 | 显示全部楼层
最佳答案
2 
累计签到:8 天
连续签到:1 天
坏小子 发表于 2016-7-29 14:06:53 | 显示全部楼层
学习啦,之前写爬虫可是为了这个编码问题头疼半天了
最佳答案
0 
累计签到:55 天
连续签到:1 天
haizi865 发表于 2016-8-2 10:21:57 | 显示全部楼层
学习到了!
最佳答案
0 
累计签到:19 天
连续签到:1 天
sevin 发表于 2016-8-16 21:24:44 | 显示全部楼层
很有帮助
最佳答案
0 
累计签到:127 天
连续签到:1 天
goodgrape 发表于 2016-9-16 10:16:21 | 显示全部楼层
Python 神奇的地方真是太多!
最佳答案
0 
累计签到:17 天
连续签到:1 天
浅葱白雪 发表于 2016-9-21 16:00:14 | 显示全部楼层
赞一个
最佳答案
0 
累计签到:38 天
连续签到:1 天
一刀封喉 发表于 2016-12-1 11:42:40 | 显示全部楼层
灰常棒棒哒
最佳答案
1 
累计签到:193 天
连续签到:1 天
流月飞星 发表于 2016-12-22 23:04:42 | 显示全部楼层
厉害了

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

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

    移动客户端下载(未启用)
    微信公众号

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

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2017-12-17 14:14

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