有了它,Python编码再也不为字符集问题而发愁了!

【python小工具】chardet.detect 检测、转换文本编码 from chardet import detect as char_detect def change_encode_type(file_path, des='utf-8'): # 获取原文本的编码类型 with open(file_path, 'rb') as f: detect_result = char_detect(f.read(200)) src = detect_result['encoding'].lower() print(' 阅读详情
恼人的字符集

不论是什么编程语言,都免不了涉及到字符集的问题,我们经常在读写本文、获取网页数据等等各类情景下,需要和字符集编码打交道。这几天在公司就遇到了这么一个问题,由于软件需要初始化许多参数信息,所以使用ConfigParser模块进行配置文件的读写操作。本来一切OK,但当把这些.ini配置文件提交到git仓库后,再次下载使用时,默认的utf-8字符集编码,被git默认修改成了gbk编码。导致读取配置文件时默认使用的utf-8编码,最终导致异常报错。那么该如何解决读取文件时的字符集问题呢?Python有专门的字符集检测模块chardet,今天就带大家一起学习下它。

chardet介绍

Chardet:通用字符编码检测器,Python版本:需要Python 2.6,2.7或3.3+。**
检测字符集范围:

  • ASCII,UTF-8,UTF-16(2种变体),UTF-32(4种变体)
  • Big5,GB2312,EUC-TW,HZ-GB-2312,ISO-2022-CN(繁体中文和简体中文)
  • EUC-JP,SHIFT_JIS,CP932,ISO-2022-JP(日文)
  • EUC-KR,ISO-2022-KR(韩文)
  • KOI8-R,MacCyrillic,IBM855,IBM866,ISO-8859-5,windows-1251(西里尔文)
  • ISO-8859-5,windows-1251(保加利亚语)
  • ISO-8859-1,windows-1252(西欧语言)
  • ISO-8859-7,windows-1253(希腊语)
  • ISO-8859-8,windows-1255(视觉和逻辑希伯来语)
  • TIS-620(泰国语)
安装

chardet在使用前,我们需要安装它:pip install chardet即可。

命令行工具

安装好chardet后,模块会附带一个命令行的检测工具:

% chardetect somefile someotherfile
somefile: windows-1252 with confidence 0.5
someotherfile: ascii with confidence 1.0
5847426-af04026b861dad1e.png
chardetect 命令行
文档地址

对于用户,现在可以通过https://chardet.readthedocs.io/获取文档。

入门例子

仿照官网的例子,我们针对脚本之家和百度两个网站进行内容的编码检测:

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清风Python
# @Date     : 2019/8/14 2:09
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : str_coding.py

import requests
import chardet

urls = ['https://www.jb51.net', 'https://www.baidu.com/']
for url in urls:
    r = requests.get(url)
    print(url, chardet.detect(r.content))

output:
https://www.jb51.net {'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
https://www.baidu.com/ {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}

可以看到结果脚本之家是gb2312而百度是utf-8.那么是否正确呢?我们只需要在对应的网页上右键点击查看网页源代码,通过检索html中<meta charset="xxx" />内容即可获取网站编码。

5847426-664695a572754043.png
网站编码

可以看到统计结果正确...

判断文本编码

刚才看到的是获取网站返回值的编码,那么文本的编码如何获取呢?

import chardet
with open('strcoding.py','rb') as f:
    print(chardet.detect(f.read()))

# output:
{'encoding': 'utf-8', 'confidence': 0.9690625, 'language': ''}

这里需要注意,由于对于文本的编码的未知性,我们需要使用二进制的方式打开文本,之后再获取字符集。

逐步检测编码

对于简短的网页或者文本内容,我们可以按照上述的方式进行操作,但如果我的文本是以G为单位计算的,如何能快速的获取文本的字符集内容呢?我们可以使用chardet模块的逐步检测编码方式,下面我们来对比下两者的差距,我这里就不用G级的数据了,那伏天氏小说的11MB内容就已经很能说明问题了:

# 原始方法
import chardet
import time

t0 = time.process_time()
with open("伏天氏.txt",'rb') as f:
    print(chardet.detect(f.read()))
t1 = time.process_time()
print(t1-t0)

# output:
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
105.3786755

# 逐步检索方法:
import time
from chardet.universaldetector import UniversalDetector

detector = UniversalDetector()

t0 = time.process_time()
for line in open("伏天氏.txt", 'rb'):
    detector.feed(line)
    if detector.done:
        break
detector.close()
print(detector.result)
t1 = time.process_time()
print(t1 - t0)

# output:
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
45.1466894

我们可以看到,原始的方法,我们需要将所有的文本全部读取后,一行行的检测,最终获取结果,但使用UniversalDetector的方式,进行逐行判断,当系统读取进度觉得可以确定字符集编码时,就不再往下继续检测,从而返回结果。大大缩短了检测的时间

如果要检测多个文本的编码(例如单独的文件),则可以重复使用单个UniversalDetector对象。只需detector.reset()在每个文件的开头调用 ,根据需要调用detector.feed 多次,然后调用detector.close()并检查detector.result字典中的文件结果。

计时方法变更

之前版本大家在进行时间计时是,经常使用到的就是time.time()和time.clock()两个模块。两者的差异在于time.clock()计算的是cpu时间差,而time.time()计算的是电脑的系统时间差。
但当你在python3.7版本使用time.clock()时,系统会给出如下提示:

DeprecationWarning: time.clock has been deprecated in Python 3.3 and will be removed from Python 3.8: use time.perf_counter or time.process_time instead

意思比较简单,time.clock在python3.3以后不被推荐使用,该方法依赖操作系统,建议使用per_counter(返回系统运行时间)或process_time(返回进程运行时间)代替。

The End
5847426-b3ade632426c0766.png
清风Python

将安卓手机打造成你的python全栈开发利器

寒冬袭来,带你使用Flask开发一款天气查询软件吧

Python开发GUI,图片转换素描画工具

程序员的自我救赎,使用python开发性格分析工具

使用python假装黑客,批量破解朋友的网站密码

如何在Python爬虫中处理HTML实体编码与字符集问题 本文介绍了Python爬虫中处理HTML实体编码和字符集问题的解决方案。主要内容包括:1)HTML实体编码(如&lt;、&gt;)的作用与解码方法;2)常见字符集(UTF-8、ISO-8859-1等)的特性与处理技巧;3)使用requests库自动/手动处理字符集;4)通过html模块或BeautifulSoup解码HTML实体;5)利用chardet检测混合编码。这些方法能有效解决爬虫数据乱码问题,确保数据准确性。 阅读详情

相关推荐

电力市场小白必看:手把手教你用Matlab实现市场出清电价计算(附完整代码)

本文为电力市场初学者提供了使用Matlab计算市场出清电价的完整指南。通过Yalmip和Matpower工具包,详细讲解了从环境配置到模型构建、求解及结果分析的整个过程,帮助读者快速掌握节点电价计算的核心技术。

weixin_30379531的博客 73

Python不再为字符集编码发愁,使用chardet轻松解决你的困扰。

秋季注意卫生 最近朋友间出现各种在外面吃饭,导致腹泻、肠胃炎的情况。在此提醒大家,秋季是传染病高发季节,请大家务必注意饮食卫生,身体是搬砖的本钱啊! 恼人的字符集 不论是什么编程语言,都免不了涉及到字符集的问题,我们经常在读写本文、获取网页数据等等各类情景下,需要和字符集编码打交道。这几天在公司就遇到了这么一个问题,由于软件需要初始化许多参数信息,所以使用ConfigParser模...

清风Python 685

光猫改桥接后,一根网线搞定IPTV和上网的保姆级教程(附VLAN配置避坑点)

本文详细介绍了光猫改桥接后如何通过单线复用技术实现IPTV和上网功能共存。从VLAN配置原理到具体操作步骤,包括光猫超级管理员权限获取、VLAN绑定设置及路由器IPTV功能配置,提供了全面的保姆级教程。特别针对常见问题如IPTV信号丢失、网速下降等给出了实用解决方案,帮助用户轻松避坑。

weixin_29927965的博客 1759

Python chardet.detect 字符编码检测

它会统计字节串中每个字符或字符对出现的频率,并将这些统计结果与预先训练好的字符编码模型进行比较。:可以尝试使用多种可能的编码进行解码,然后根据解码后的结果来判断哪种编码是正确的。在 Python 中,没有一种方法可以完全准确地检测字节串的编码,因为字节串本身并不包含关于其编码的元信息。例如,如果字节串是从特定来源获取的,你可以根据该来源的编码做出假设。虽然这种方法在很多情况下表现良好,但并不是完美的,尤其是对于较短或包含特殊字符的字节串。是 Python 的一个库,用于检测给定字节串的字符编码。

qq_35667076的博客 1341

Python量化投资——mplfinance实现全功能动态交互式K线图(蜡烛图)【源码+详解】

特别鸣谢:@szFoxtech 同学热心提供了通过键盘操作平移和缩放K线图的代码!!在我的另一篇文章《七行代码利用tushare和mplfinance生成K线图》中,我介绍了两个非常好用的python库,结合起来可以非常方便容易地生成股票的K线图,对于使用python进行量化投资研究的朋友可谓是必备良方。如下图所示,仅仅几行代码,就能生成下面这张K线图:不过,仅仅使用七行代码生成的K线图,虽然看上去也像那么回事了,但是对于真正需要使用K线图作为研究工具或者可视化工具的朋友们来说,是远远不够的。在我看来,至少

m0_67390379的博客 9835

UE4游戏逆向实战:从HOOK明文包到自定义发包的完整流程(附加密算法解析)

本文详细解析了UE4游戏网络通信的逆向工程完整流程。从定位线程发包点、HOOK拦截明文封包,到逆向分析加密解密算法,最终实现自定义组包与加密发送。文章结合实战案例,为游戏安全研究和技术人员提供了一套清晰、可操作的方法论。

weixin_29009081的博客 1236

【python学习】基础篇-常用第三方库-chardet:检测文本文件的编码格式

chardet是一个Python库,用于检测文本文件的编码格式。

邑轻辰的学习笔记 960

钣金件设计规范

为保证折弯 强度,钣金折弯钣金应大于材料的最小折弯半径。在设计U型弯曲件时,两弯曲边最好长度相等,以免弯曲时产品偏 移而产生废品,如果因为结构设计不允许两边一样长,为保证产品在模 具中准确定位,应预先在设计时添加工艺定位孔,特别是多次折弯成 形的零件,必须设计工艺孔为定位基准,以减少累计误差,保证产品 质量,如图2-11所示。凸包是依靠材料的延伸使钣金件形成局部凹陷或凸起的冲压工序凸包与拉深是完全不同的冲压工艺,凸包中材料厚度的改变为费意图性 的,即厚度的少量改变是变形过程中形成的,不是设计指定的要求。

制冷技术咨询与服务的博客 7327

2025终极指南:解决Chardet字符编码检测99%的痛点

你是否曾在处理文本数据时遇到过乱码?是否因为无法正确识别文件编码而浪费数小时?作为开发者,我们经常面临这样的问题:从网络爬取的文本显示为"釜"而非"测试",日志文件中的特殊字符变成了问号,或者数据分析时因编码错误导致整个数据集损坏。字符编码(Character Encoding)问题就像一颗隐藏的炸弹,随时可能在数据处理流程中引爆。 Chardet作为Python生态中最流行的字符编...

gitblog_00904的博客 619

vivado运行时报错 license文件更新操作

vivado使用:SYNTHESIS->Run Synthesis 时报错 [Common 17-345] A valid license was not found for feature ‘Synthesis’ and/or device ‘xc7vx485t’. Please run the Vivado License Manager for assistance in determiningwhich features and devices are licensed for your sy

qq_44692266的博客 2万+

(2-2-2)位置控制算法:常用的位置控制算法(2)

例如下面是一个使用滑模控制算法实现机器人位置控制的例子,在该例子中,假设机器人在一维空间中移动,目标是使机器人的位置迅速、鲁棒地达到设定的目标位置。自适应控制算法通过实时地调整控制器参数,可以适应系统的变化,从而提高系统的鲁棒性和性能。模型预测控制(Model Predictive Control,MPC)是一种先进的控制策略,通常应用于动态系统,以实现对系统状态的优化控制。(6)迭代优化:随着时间推移,MPC迭代执行上述步骤,持续优化控制输入,以适应系统动态和外部扰动,实现对系统状态的稳健控制。

码农三叔 1608

python 检查是否繁体中文_有了它,Python编码再也不为字符集问题而发愁了!

各位亲爱的开发者们,为了给大家分享更多精彩的技术干货,给大家创造更加纯净的开发者交流环境,请移步至csdn平台华为云专区哦,点击传送门关注:https://blog.youkuaiyun.com/devcloud恼人的字符集不论是什么编程语言,都免不了涉及到字符集的问题,我们经常在读写本文、获取网页数据等等各类情景下,需要和字符集编码打交道。这几天在公司就遇到了这么一个问题,由于软件需要初始化许多参数信息,所...

weixin_39661345的博客 2497

innovus:ccopt_design流程

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?spec文件可以只创建一次,无需多次创建。2)virtual balance阶段。3)Full Balancing阶段。4)Clock Routing阶段。1)clustering阶段。

m0_61544122的博客 2477

Python2-3字符集编码一次性解决

**— title: Python字符集编码 copyright: true top: 0 date: 2018-10-14 10:47:41 tags: 编码 categories: Python进阶笔记 permalink: password: keywords: description: py2与py3的字符编码问题一次性解决 他盯着覆盖了龙眼的那层坚硬的瞬膜,想到那对在黑暗里缓缓睁开的黄...

浪子燕青的博客 1746

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python3 字符集编码以及python3 乱码问题

python3 字符编码python3 字符编码 编码 为什么有编码 ASCII 编码 Unicode 编码 UTF-8 编码 GBK 编码 GBK 和 UTF-8 的主要区别 编码工作方式 python3 编码 encode 方法 decode 方法 python3 乱码 window 问题 encode 和 decode 方法 isinstance 编码为什么有编码计算机只能处理数字,人类需要处

热心市民王先生 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python编码类型转换及字符集探讨

一直遇到python编码的问题。常常抓取的网页数据信息,邮件收发信息,涉及到文字处理的,都时不时出现编码的问题。终于,觉得有必要认真了解下这个编码过程和出现对应的问题如何解决,在网上找了很多解释和文章,整理了下,并结合实践了一些,记录在这里。 1、常见字符集 ASCII及其扩展字符集 作用:表语英语及西欧语言。 位数:ASCII是用7位表示的,能表示128个字符;其扩展使用8位

我在全球村 5685

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Python中的编码与解码字符集与Unicode的详解

本文深入探讨了Python中的字符编码与解码的重要性和应用。首先,我们了解了字符集与编码的基本概念,以及Unicode作为全球字符标准的重要性。然后,我们介绍了Python中处理编码与解码的基本操作,包括字符串的编码和解码、Unicode编码的获取和字符创建,以及处理编码错误的方法。接着,我们深入了解了UTF-8作为Unicode的一种实现方式,并探讨了Python中的一些高级字符处理功能,如编码器和解码器、文本处理工具以及文件编码转换。

一键难忘的博客 3771

python的编码模块char_Python不再为字符集编码发愁,使用chardet轻...

恼人的字符集不论是什么编程语言,都免不了涉及到字符集的问题,我们经常在读写本文、获取网页数据等等各类情景下,需要和字符集编码打交道。这几天在公司就遇到了这么一个问题,由于软件需要初始化许多参数信息,所以使用ConfigParser模块进行配置文件的读写操作。本来一切OK,但当把这些.ini配置文件提交到git仓库后,再次下载使用时,默认的utf-8字符集编码,被git默认修改成了gbk编码。导致读...

weixin_39732491的博客 142

1字符集 iso latin_Python不再为字符集编码发愁,使用chardet轻松解决你的困扰。

恼人的字符集不论是什么编程语言,都免不了涉及到字符集的问题,我们经常在读写本文、获取网页数据等等各类情景下,需要和字符集编码打交道。这几天在公司就遇到了这么一个问题,由于软件需要初始化许多参数信息,所以使用ConfigParser模块进行配置文件的读写操作。本来一切OK,但当把这些.ini配置文件提交到git仓库后,再次下载使用时,默认的utf-8字符集编码,被git默认修改成了gbk编码。导致读...

weixin_34307867的博客 147

编码与字符集

本文深入探讨了字符编码,特别是Unicode及其在Python中的应用。首先,解释了GBK和UTF-8编码方式,展示了如何将中文字符串编码为字节序列。接着,讨论了ASCII编码的基础及其局限性。文章还阐述了ANSI编码的多样性和地区依赖性,并比较了它与Unicode的区别。最后,强调了Unicode在促进全球通信、软件国际化和统一数据存储方面的重要性,并介绍了UTF-8、UTF-16和UTF-32等不同的Unicode编码形式。尽管Unicode在实际应用中面临兼容性和性能挑战,但它为全球文本处理提供了统一

HaoChenbest的博客 1074

GB 2312字符集:中文编码的基石

GB2312字符集作为中国大陆最早的中文字符集之一,为中文信息处理提供了基础。其支持常用中文字符、兼容性强、简单易用和节省存储空间等优点,使其在操作系统、编程语言和中文文档处理等领域得到广泛应用。然而,由于容量有限、不支持繁体字和兼容性局限等局限性,GB2312字符集在某些场景下可能遇到挑战。对于开发人员和中文文档处理者来说,了解和正确应用GB2312字符集,可以确保中文编码和显示的正确性和一致性,提高中文信息处理的效率和准确性。

https://blog.cmdragon.cn/ 1621

【python】字符编码和字符集,结合python语言示例

字符编码和字符集,结合python语言

qq_41604569的博客 585
上一篇: 带你了解Python炫酷的颜色输出与进度条打印
下一篇: Python的小数据存储,用什么格式更有逼格?
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值