鱼C论坛

 找回密码
 立即注册
查看: 47649|回复: 85

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

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

马上注册,结交更多好友,享用更多功能^_^

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

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, 下载次数: 2192)

打开命令行窗口(同上),切换目录到上方解压包的文件夹,输入命令:C:\Python34\python.exe setup.py install

BaiduShurufa_2015-11-8_2-36-17.png


chardet 模块用法:

非常简单,使用该模块的 detect() 函数即可:
  1. >>> import urllib.request
  2. >>> response = urllib.request.urlopen("http://bbs.fishc.com").read()
  3. >>> import chardet
  4. >>> chardet.detect(response)
  5. {'confidence': 0.99, 'encoding': 'GB2312'}
复制代码

哦,confidence 是可信度的意思……

0.99 就是 99% 确定是 'GB2312'!

年轻人,你太傲娇了,偶其实使用的是 GBK 编码(GBK 是 GB2312 的扩展)

6.gif

所以你直接 decode('GB2312') 还是会报错的:
  1. >>> response.decode("GB2312")
  2. Traceback (most recent call last):
  3.   File "<pyshell#41>", line 1, in <module>
  4.     response.decode("GB2312")
  5. UnicodeDecodeError: 'gb2312' codec can't decode byte 0xfd in position 22581: illegal multibyte sequence
复制代码


你现在有两种选择:

一、忽略识别不出的字符(GB2312 支持的汉字比较少,如果用这种方法会出现小部分乱码)

  1. >>> response.decode("GB2312", "ignore")
  2. ……
  3. <ul><li># <a href="thread-64400-1-1.html" title="乔布斯最精彩演讲:这三个故事决定了我的一生" target="_blank">乔布斯最精彩演讲:这三个故事决定了我的一</a></li><li># <a href="thread-50608-1-1.html" title="42个锻炼大脑的方法,你想不聪明都不行!" target="_blank">42个锻炼大脑的方法,你想不聪明都不行!</a></li><li># <a href="thread-23917-1-1.html" title="潘靠赐辏泪流满面(转)" target="_blank">潘靠赐辏泪流满面(转)</a>
  4. ……
复制代码


二、(推荐)由于 GBK 是向下兼容 GB2312,因此你检测到是 GB2312,则直接用 GBK 来编码/解码

  1. >>> if chardet.detect(response)['encoding'] == 'GB2312':
  2.         response.decode('GBK')
  3. ……
  4. <ul><li># <a href="thread-64400-1-1.html" title="乔布斯最精彩演讲:这三个故事决定了我的一生" target="_blank">乔布斯最精彩演讲:这三个故事决定了我的一</a></li><li># <a href="thread-50608-1-1.html" title="42个锻炼大脑的方法,你想不聪明都不行!" target="_blank">42个锻炼大脑的方法,你想不聪明都不行!</a></li><li># <a href="thread-23917-1-1.html" title="屌丝看完,泪流满面(转)" target="_blank">屌丝看完,泪流满面(转)
  5. ……
复制代码


评分

参与人数 23荣誉 +94 鱼币 +92 贡献 +56 收起 理由
fc5igm + 3 感谢楼主无私奉献!
白灬纸 + 2 + 2 + 2
大马强 + 5 + 5 + 3
城中城 + 4 + 4 + 3 无条件支持楼主!
莫待无花空折枝 + 3 方便
旃檀木 + 5 + 5 + 3
春見KSM + 5 + 5 + 3 良心
齐大胖 + 5 + 5 + 3 有女朋友了也要娶回家,娶回家娶回家!!!.
Agitating + 5 + 5 + 3 一下子解决了作业中各种头疼的编码问题
薄荷的琦姑娘 + 3 棒棒棒啊

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-9-6 16:32:23 | 显示全部楼层
python3.10用cmd安装直接pip install chardet会WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.报错。
从安装目录Python\Python310\Scripts可以看到pip有三个,试了一下pip3和pip一样报错,但是用pip3.10就成功下载安装并且运行成功了……如果第一次使用pip3.10提示WARNING: You are using pip version 21.2.4; however, version 22.2.2 is available.
You should consider upgrading via the 'C:\Users\37580\AppData\Local\Programs\Python\Python310\python.exe -m pip install --upgrade pip' command.
那就按按提示的要求输入C:\Users\37580>C:\Users\37580\AppData\Local\Programs\Python\Python310\python.exe -m pip install --upgrade pip
更新一下pip之后再用pip3.10 install chardet就可以成功安装了

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-5 19:46:26 | 显示全部楼层
神奇
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-3 10:39:46 | 显示全部楼层
请问为什么我安装不了呢 两种办法都是失败的,第一种方法显示语法错误,第二种方法说找不到路径
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-31 16:21:39 | 显示全部楼层
啊啊啊啊啊,mac装chardet真的纠结了很久很久!!!查了很多,才慢慢终于pip安装成功,再chardet成功,但是每次运行urlopen还要加上ssl代码来解决证书问题。好麻烦呀!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-19 05:07:40 | 显示全部楼层
本帖最后由 0HB 于 2021-8-19 05:10 编辑

请输入要查询的网址:https://fishc.com.cn/thread-66086-1-1.html
该网页使用的编码是; GBK
————————————————————————————————
当前网页居然就是“GBK”编码
不愧是你,小甲鱼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-18 21:28:36 | 显示全部楼层
版本python3.9
好像现在这个模块已经自带
下的python官网原版,未安装过,也有这个了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-29 16:43:12 | 显示全部楼层
6啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-28 22:30:18 | 显示全部楼层
小甲鱼辛苦啦,感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-13 12:11:51 | 显示全部楼层
感谢甲鱼老师
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-27 18:20:38 | 显示全部楼层
Mark一下...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-26 22:43:41 | 显示全部楼层
学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 12:31:57 | 显示全部楼层
爱了爱了,谢谢小甲鱼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-11 10:35:31 | 显示全部楼层
插眼 这个要用管理员模式运行吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-7 09:05:26 | 显示全部楼层
学习学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-2 20:44:01 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-23 17:25:50 | 显示全部楼层
不错不错,很清晰
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-15 20:52:22 | 显示全部楼层
啊这,救人一命,谢甲鱼哥
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-19 21:07:22 | 显示全部楼层

我也装不上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-7 09:11:56 | 显示全部楼层
学到了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 20:18:19 | 显示全部楼层
求助,我python3.7.7,为什么用GB2312可以编译成功没有报错。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-22 04:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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