Python chardet
转载自并感谢廖雪峰
字符串编码一直是令人非常头疼的问题,尤其是我们在处理一些不规范的第三方网页的时候。虽然Python提供了Unicode表示的str和bytes两种数据类型,并且可以通过encode()
和decode()
方法转换,但是,在不知道编码的情况下
,对bytes做decode()不好做。
对于未知编码的bytes,要把它转换成str,需要先“猜测”编码。猜测的方式是先收集各种编码的特征字符,根据特征字符判断,就能有很大概率“猜对”。
当然,我们肯定不能从头自己写这个检测编码的功能,这样做费时费力。chardet这个第三方库正好就派上了用场
。用它来检测编码,简单易用。
安装chardet
命令行下通过pip安装
$ pip install chardet
使用chardet
当我们拿到一个bytes时,就可以对其检测编码。用chardet检测编码,只需要一行代码:
>>> chardet.detect(b'Hello, world!')
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
检测出的编码是ascii,注意到还有个confidence字段,表示检测的概率是1.0(即100%)
我们来试试检测GBK编码的中文:
>>> data = '离离原上草,一岁一枯荣'.encode('gbk')
>>> chardet.detect(data)
{'encoding': 'GB2312', 'confidence': 0.7407407407407407, 'language': 'Chinese'}
检测的编码是GB2312,注意到GBK是GB2312的超集
,两者是同一种编码,检测正确的概率是74%,language字段指出的语言是’Chinese’。
对UTF-8编码进行检测:
>>> data = '离离原上草,一岁一枯荣'.encode('utf-8')
>>> chardet.detect(data)
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
我们再试试对日文进行检测:
>>> data = '最新の主要ニュース'.encode('euc-jp')
>>> chardet.detect(data)
{'encoding': 'EUC-JP', 'confidence': 0.99, 'language': 'Japanese'}
可见,用chardet检测编码,使用简单。获取到编码后,再转换为str,就可以方便后续处理。
chardet支持检测的编码列表请参考官方文档Supported encodings。
小结
使用chardet检测编码非常容易,chardet支持检测中文、日文、韩文等多种语言。
Python chardet相关推荐
- Python chardet 字符编码判断
http://pnig0s1992.blog.51cto.com/393390/496208 使 用 chardet 可以很方便的实现字符串/文件的编码检测.尤其是中文网页,有的页面使用GBK/GB2 ...
- 用Python chardet库来判断文件编码
2019独角兽企业重金招聘Python工程师标准>>> 由于工作需要处理大量文件,在此之前需要统一文件编码.于是研究了一阵如何识别文件编码,转码这一过程相对简单,而识别确实个难题.由 ...
- python读写csv时中文乱码问题解决办法
参考1 参考2 参考3 CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 "," 分隔的一列列的数据构成的,可以使用excel和 ...
- python csv 中文乱码_python读写csv时中文乱码问题解决办法
CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 "," 分隔的一列列的数据构成的,可以使用excel和文本编辑器等打开.CSV ...
- python爬虫脚本ie=utf-8_Python网络爬虫出现乱码问题的解决方法
关于爬虫乱码有很多各式各样的问题,这里不仅是中文乱码,编码转换.还包括一些如日文.韩文 .俄文.藏文之类的乱码处理,因为解决方式是一致的,故在此统一说明. 网络爬虫出现乱码的原因 源网页编码和爬取下来 ...
- [转载] 【原创】Python 3 查看字符编码方法
参考链接: Python | 字符串rstrip 查看字符编码,需要用到chardet模块 一.查看网页编码 Python #coding=utf-8 import urllib.request im ...
- python 判断txt文件的编码格式
import chardetf = open('/path/file.txt',r) data = f.read() print(chardet.detect(data)) 返回值会是类似这样的 一 ...
- python查看字符串编码方式_Python字符编码判断方法分析
本文实例讲述了Python字符编码判断方法.分享给大家供大家参考,具体如下: 方法一: isinstance(s, str) 用来判断是否为一般字符串 isinstance(s, unicode) 用 ...
- 金典《歌手》吴青峰上演催泪杀 淘汰赛正式打响
1月11日,金典<歌手>2019首播,首发七位歌手惊艳登台,当即霸占微博热搜,同时成为当晚收视最高的综艺节目,精彩程度让网友直言"神仙打架".本周,节目即将迎来首场紧张 ...
- 【Scikit-Learn 中文文档】特征提取 - 数据集转换 - 用户指南 | ApacheCN
中文文档: http://sklearn.apachecn.org/cn/stable/modules/feature_extraction.html 英文文档: http://sklearn.apa ...
最新文章
- 抛弃P值,选择更直观的A/B测试!
- 转:Facebook是如何发布代码的
- QT乱码总结9.编码测试和总结四
- moofs分布式存储
- filter operation implementation in SAP Gateway framework
- !+\v1 用来“判断浏览器类型”还是用来“IE判断版本”的问题!
- ros(7)自定义service数据
- 又一波“打工人”财富自由!快手赴港上市,4000员工人均身家一夜涨至3000万...
- 【数据结构(C语言)】数据结构-表
- OSI参考模型与排错
- 进销存系统功能结构图
- deepin 下安装xdroid
- xp系统计算机配置在哪里设置,XP系统电脑进行声卡设置的方法介绍
- 区块链是什么,如何简单易懂地介绍区块链?
- iOS基础 关于UIKit框架
- 微信用计算机,技巧:计算机可以使用微信吗?
- NYOJ 1248 海岛争霸 河南省赛真题 Floyd 或者 并查集
- 苹果计算机如何出现关机界面,电脑关机.教您苹果电脑怎么关机
- 数学建模微分方程导弹问题matlab求解,Matlab建模—导弹追踪问题
- 4年!我对OpenStack运维架构的总结