转载自并感谢廖雪峰
字符串编码一直是令人非常头疼的问题,尤其是我们在处理一些不规范的第三方网页的时候。虽然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相关推荐

  1. Python chardet 字符编码判断

    http://pnig0s1992.blog.51cto.com/393390/496208 使 用 chardet 可以很方便的实现字符串/文件的编码检测.尤其是中文网页,有的页面使用GBK/GB2 ...

  2. 用Python chardet库来判断文件编码

    2019独角兽企业重金招聘Python工程师标准>>> 由于工作需要处理大量文件,在此之前需要统一文件编码.于是研究了一阵如何识别文件编码,转码这一过程相对简单,而识别确实个难题.由 ...

  3. python读写csv时中文乱码问题解决办法

    参考1 参考2 参考3 CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 "," 分隔的一列列的数据构成的,可以使用excel和 ...

  4. python csv 中文乱码_python读写csv时中文乱码问题解决办法

    CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 "," 分隔的一列列的数据构成的,可以使用excel和文本编辑器等打开.CSV ...

  5. python爬虫脚本ie=utf-8_Python网络爬虫出现乱码问题的解决方法

    关于爬虫乱码有很多各式各样的问题,这里不仅是中文乱码,编码转换.还包括一些如日文.韩文 .俄文.藏文之类的乱码处理,因为解决方式是一致的,故在此统一说明. 网络爬虫出现乱码的原因 源网页编码和爬取下来 ...

  6. [转载] 【原创】Python 3 查看字符编码方法

    参考链接: Python | 字符串rstrip 查看字符编码,需要用到chardet模块 一.查看网页编码 Python #coding=utf-8 import urllib.request im ...

  7. python 判断txt文件的编码格式

    import chardetf = open('/path/file.txt',r) data = f.read() print(chardet.detect(data)) 返回值会是类似这样的  一 ...

  8. python查看字符串编码方式_Python字符编码判断方法分析

    本文实例讲述了Python字符编码判断方法.分享给大家供大家参考,具体如下: 方法一: isinstance(s, str) 用来判断是否为一般字符串 isinstance(s, unicode) 用 ...

  9. 金典《歌手》吴青峰上演催泪杀 淘汰赛正式打响

    1月11日,金典<歌手>2019首播,首发七位歌手惊艳登台,当即霸占微博热搜,同时成为当晚收视最高的综艺节目,精彩程度让网友直言"神仙打架".本周,节目即将迎来首场紧张 ...

  10. 【Scikit-Learn 中文文档】特征提取 - 数据集转换 - 用户指南 | ApacheCN

    中文文档: http://sklearn.apachecn.org/cn/stable/modules/feature_extraction.html 英文文档: http://sklearn.apa ...

最新文章

  1. 抛弃P值,选择更直观的A/B测试!
  2. 转:Facebook是如何发布代码的
  3. QT乱码总结9.编码测试和总结四
  4. moofs分布式存储
  5. filter operation implementation in SAP Gateway framework
  6. !+\v1 用来“判断浏览器类型”还是用来“IE判断版本”的问题!
  7. ros(7)自定义service数据
  8. 又一波“打工人”财富自由!快手赴港上市,4000员工人均身家一夜涨至3000万...
  9. 【数据结构(C语言)】数据结构-表
  10. OSI参考模型与排错
  11. 进销存系统功能结构图
  12. deepin 下安装xdroid
  13. xp系统计算机配置在哪里设置,XP系统电脑进行声卡设置的方法介绍
  14. 区块链是什么,如何简单易懂地介绍区块链?
  15. iOS基础 关于UIKit框架
  16. 微信用计算机,技巧:计算机可以使用微信吗?
  17. NYOJ 1248 海岛争霸 河南省赛真题 Floyd 或者 并查集
  18. 苹果计算机如何出现关机界面,电脑关机.教您苹果电脑怎么关机
  19. 数学建模微分方程导弹问题matlab求解,Matlab建模—导弹追踪问题
  20. 4年!我对OpenStack运维架构的总结

热门文章

  1. 骚操作“破解“App
  2. 史上最强的10大管理定律
  3. pycharm 删除服务器文件,使用 rm -rf 删除了工程目录,然后从 pycharm 中找了回来...
  4. 菜鸟的B4A(B4X)开发成长日志
  5. java局域网视频传输,java局域网传输
  6. 手把手教你如何使用kali破解wifi密码(图文教程)
  7. 云服务器安装KALI教程
  8. STM32F207时钟系统解析
  9. 给mBlock添加扩展模块
  10. 最简单的直播礼物连刷特效制作(带源码)