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

【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

OK,今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点击文章右下角的“在看”。
期待你关注我的公众号清风Python,如果觉得不错,希望能动动手指转发给你身边的朋友们。
希望每周一至五清晨的7点10分,都能让清风Python的知识文章叫醒大家!谢谢……

5847426-612ae1f58118218c.png
清风Python

C/C++面试八股文汇总 以对象管理资源,利用的就是C++构造的对象最终会被对象的析构函数销毁的原则。上述的的申请、使用、释放资源的程序较为简单,但是如果程序很复杂的时候,需要为所有的new 分配的内存delete掉,导致极度臃肿,效率下降,更可怕的是,程序的可理解性和可维护性明显降低了,当操作增多时,处理资源释放的代码就会越来越多,越来越乱。栈在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。 阅读详情

相关推荐

MoveIt避坑指南:UR机械臂编程中常见的5个错误及解决方法

本文针对UR机械臂与MoveIt集成开发中的常见问题,总结了五个典型错误及其解决方案,包括关节限位设置、坐标系混淆、规划器选择、运动学求解器配置以及线程资源管理。重点分析了正逆运动学求解错误的原因,并提供了调整容忍度、显式指定坐标系、选择合适规划器及优化IK配置等实用代码示例,帮助开发者提升编程效率与系统稳定性。

root9的博客 434

Python chardet.detect 字符编码检测

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

qq_35667076的博客 1341

STM32 IAP跳转后APP卡死?别慌,手把手教你修复HAL_RCC_OscConfig时钟配置冲突

本文深入分析了STM32 IAP跳转后APP在HAL_RCC_OscConfig函数中卡死的问题,揭示了PLL时钟配置冲突的根本原因。通过详细的代码示例和分步解决方案,指导开发者正确处理STM32F1/F4系列的时钟系统二次初始化问题,确保IAP+APP架构的稳定运行。

weixin_28685287的博客 365

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

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

邑轻辰的学习笔记 960

深入浅出CenterFusion

结合论文和代码理解CenterFusion

Untitled的专栏 5104

从零搭建SPI通信系统:AXI Quad SPI IP核在Xilinx平台上的完整配置流程

本文详细介绍了在Xilinx平台上使用AXI Quad SPI IP核从零搭建SPI通信系统的完整配置流程。涵盖IP核架构解析、Vivado环境配置、寄存器编程实战及性能优化策略,帮助开发者快速实现高速稳定的SPI通信,特别适用于嵌入式系统开发中的外围设备连接需求。

hh234的博客 1053

ensure_ascii与chardet

1、json.dumps(dictstr,ensure_ascii=False)把python中的字典格式,转成json格式,因为默认使用ASCII编码,所以如果设置为False表示禁用ASCII编码,则使用unicode编码当对于是中文的部分,再次写入文件,。如果想得到中文显示要,可以把上面得到的结果进行编码encode('utf-8')2、用于检测编码格式使用下面chardet.detect(...

w2blue的博客 597

DeepSeek+Cline:开启自动化编程新纪元

随着 AI 技术不断进步,编程领域迎来效率变革。DeepSeek 与 Cline 的结合,成为自动化编程的强大工具。DeepSeek 凭借先进的自然语言处理能力,能精准理解编程需求;Cline 作为 VSCode 插件,可实现代码生成、调试、注释等功能的无缝衔接。本文详细阐述二者安装配置、实战操作流程,涵盖从基础代码生成到复杂项目开发的应用技巧,同时解答常见问题,帮助开发者快速掌握这对 “智能搭档”,提升编程效率,解锁自动化编程的无限可能。

邓邓子的博客 6254

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

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

gitblog_00904的博客 619

基于Simulink的强化学习(DQN)自主调节占空比

摘要:本文介绍了一种基于Simulink的强化学习(DQN)方法,用于Buck变换器的自主占空比调节。通过建立马尔可夫决策过程模型,设计了包含状态、动作和奖励函数的强化学习框架,并在Simulink中实现了Buck主电路、RL接口模块和DQN智能体的集成。实验表明,相比传统PID控制,DQN方法在负载突变和输入跌落等复合扰动下表现出更好的鲁棒性,电压超调小于1%,恢复时间缩短至0.3ms。文章还详细讨论了关键设计技巧、工程挑战及对策,并提出了多目标优化、先进算法应用等扩展方向,为智能电源控制提供了新思路。

amy_mhd的博客 75

7.6 GPU页表更新机制

本文分析了AMDGPU驱动中BO到VA映射的页表更新实现机制。核心流程通过amdgpu_vm_bo_update()函数触发,支持CPU直接写入和SDMA异步命令两种更新模式。系统根据VRAM可见性自动选择最优更新策略,处理三种主要场景:命令提交、BO迁移和BO销毁。关键实现包括DMA地址数组处理、权限标志合并和BO迁移状态转换,最终通过amdgpu_vm_update_range()完成硬件页表更新。该机制有效平衡了更新延迟与吞吐量,为GPU虚拟内存管理提供基础支撑。

图形/计算GPU的驱动与虚拟化技术分享园地 2470

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

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

weixin_34307867的博客 147

站在评审的角度写国自然基金本子,搭配这5条AI提示词,帮你一键提升本子中标率

多数同仁的选题失败,不是因为你的idea不好,而是你的逻辑没有立起来,你必须让评审看到,你是怎么从问题走向方法的。请你按照“同行做到哪、瓶颈卡在哪、我该怎么破”的逻辑,将我的创新点进行重构:【粘贴你原始的创新点描述】,要求:表达需结构化、可量化、可验证,突出对比后的实质性突破。与其等着评审指出问题,等着本子被拒,不如让AI提前模拟评审,帮你从可行性、创新性、国家价值、团队能力四个维度给你打分,并指出项目的致命破绽,提示词这样设计。创新点如果写不好,本子往往也会被拒,而评审一般喜欢的创新点都是有固定结构的。

智能AI让学术科研更容易 1239

python的编码模块char_Python不再为字符集编码发愁,使用chardet轻松解决你的困扰。...

欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字“加群”,加入华为云线上技术讨论群;输入关键字“最新活动”,获取华为云最新特惠促销。华为云诸多技术大咖、特惠活动等你来撩恼人的字符集不论是什么编程语言,都免不了涉及到字符集的问题,我们经常在读写本文、获取网页数据等等各类情景下,需要和字符集编码打交道。这几天在公司就遇到了这么一个问题,由于软件需要初始化许...

weixin_33924571的博客 182

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python Chardet 库详解:字符编码检测的利器

Chardet是 Python 中处理字符编码问题的强大工具,特别适合于编码检测和乱码问题的排查。在日常数据处理工作中,合理使用 Chardet 可以大大提高效率,减少编码相关的错误。你是否在工作中遇到过编码问题?欢迎在评论区分享你的经验!# 示例字符串data = "你好,世界!# 检测字符串编码import chardet # 示例字符串 data = "你好,世界!

萧鼎的博客 1376

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python中动态检测编码chardet的使用教程

最近利用python抓取一些网上的数据,遇到了编码的问题。非常头痛,幸运的是找到了解决的方法,下面这篇文章主要跟大家介绍了关于Python中动态检测编码chardet的使用方法,需要的朋友可以参考借鉴,下面来一起看看吧。 前言 在互联网的世界里,每个页面都使用了编码,但是形形色色的编码让我们的代码何以得知其棉麻格式呢?charset将很好的解决这个问题。 chardet chardet是Pyth...

python基础编程开发教程 942

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Python小白避坑技巧

Python是一门非常受欢迎的编程语言,它易于入门、功能强大,几乎可以应用于任何领域。但是,初学者在学习Python时也容易遇到一些坑。在这篇博客中,我们将分享一些避免这些坑的技巧。学习编程永远不是一帆风顺的,而这些问题只是Python中的几个小坑,但它们可能会让你感到困惑。遵循这些建议,你就能够避免这些问题并更好地了解Python。希望这篇博客能够对新手们入门Python时有所帮助。

weixin_42684521的博客 285

Python 自动识别并批量转换文本文件编码

在上面的示例程序中,首先指定要转换的文件夹路径,然后遍历该文件夹下的所有文件,判断是否是文本文件。对于每个文本文件,先使用 chardet 模块自动识别文件编码,然后使用 codecs 模块将文件转换为 utf-8 编码并覆盖原文件。注意,这里使用了 rb 模式读取文件,因为 chardet 模块需要二进制模式读取文件才能进行编码识别。模块用于自动识别文本文件编码,并且可以使用。# 自动识别文件编码。# 判断是否是文本文件。# 遍历文件夹下所有文件。Python 提供了。# 要转换的文件夹路径。

weixin_52664417的博客 1322

python chardet 读取文件内容 自适应编码 读取文件

import chardet def ReadFile(filename): ''' 自适应编码 读取文件 Parameters ---------- filename : TYPE "D:\\193031.txt" DESCRIPTION. Returns 文件全部内容 ------- new_content : TYPE DESCRIPTION. ''' try: wit

绀目澄清 572

Python之检测文件的字符编码(chardet)

现象使用某编辑器编辑完MD文档保存之后没注意编码,再次重新打开之后一片乱码,再尝试过常见的几种字符编码之后还是不行。只能检测字符编码了,检测完之后居然用了UTF-16 LE编码。#coding=utf-8 import codecs ,chardetwith codecs.open("1.txt","rb") as f: data = f.read() print(chardet.d

mighty13的专栏 2万+

python 实现文本文件的编码检测和转换

python 实现文本文件的编码检测和转换 记得在前公司做嵌入式开发时,总是会遇到因代码文件编码不对导致的注释乱码问题。因为部门里很多人喜欢使用 GB2312,而我比较倾向于用 utf-8 编码,所以每次合并他们代码的时候,通常我会使用一个 find 和 enca 的组合命令,对工程检索将 GB2312 的 .c 和 .h 文件转码为 utf-8,那么我们是不是可以自己编写一个 python 工具实现文件编码的检测和转换呢?当然可以,借助第三方库 chardet 就可以做到! 编码操作 要对文件编码转换前,

勤学如春起之苗,不见其增,日有所长! 辍学如磨刀之石,不见其损,日有所亏! 5838

python3用chardet检测字符编码

字符串编码一直是令人非常头疼的问题,尤其是我们在处理一些不规范的第三方网页的时候。虽然Python提供了Unicode表示的str和bytes两种数据类型,并且可以通过encode()和decode()方法转换,但是,在不知道编码的情况下,对bytes做decode()不好做。 chardect查看文件内容、字符串内容编码方法 注意:使用chardect检测encode过后的字节码,或bytes字节码 对于未知编码的bytes,要把它转换成str,需要先“猜测”编码。猜测的方式是先收集各种编码的特征字符,根

勤学如春起之苗,不见其增,日有所长! 辍学如磨刀之石,不见其损,日有所亏! 6624
上一篇: activate-power-mode,让你在Python编码中,感受炫酷的书写特效!
下一篇: 用Python爬虫批量下载糗事百科段子,怀念曾经的天王盖地虎,小鸡炖蘑菇...
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值