python 之 utf-8编码的秘密

Python ZIPFile 实战:GBK 编码乱码的根源与修复方案 本文深入探讨了Python ZIPFile在处理中文文件名时出现GBK编码乱码的根本原因,并提供了四种实用的修复方案。通过分析ZIP文件的编码机制和Python的解码策略,文章详细介绍了编码转换、修改压缩软件设置、使用第三方库以及暴力破解法等解决方案,帮助开发者有效解决中文乱码问题。 阅读详情

python3的默认编码方案是utf-8编码,看了些资料,来做总结。


要说utf-8,就要说说unicode,要说unicode,就要说ASCII,我们还是慢慢来。


1.ASCII

      ASCII编码最初是由老美搞出来的,满足了英文在计算机中的的表达和存储。开始呢,ASCII使用一个字节的后7位来进行编码。

每位有0,1 两种状态,那么就有2^7个数(十进制从0~127)来代表128个不同的字符。后来人们又对ASCII码进行了扩展,把最高位也用上了,那么就又多了128个可编码的空间。


     可是,全世界难道就只有老美用计算机吗?中文,韩文,日文,阿拉伯文.....在计算机中怎么表示呢?

       于是各国开始搞自己的一套编码方案,比如我国常见的GBK系列编码,基本解决看了中文编码的问题。

     随着网络的日益发达,人们的交流不限于自己的国家,还可以通过网络与国外交流。但是碎片化的文字编码阻碍了不同国家文字的传播,乱码时常发生。

   于是,伟大的创想Unicode诞生了。


2.Unicode

       “Unicode(万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布”

          但是,unicode并没有被广泛使用,其中一个很重要的原因是:unicode如何编码?如果统一用2个字节编码,那么ASCII用户就不高兴了,因为原先的ABC只占3个字节,采用unicode就会翻倍为6个字节,但是不采用多为字节编码,那么如何容纳世界各国的语言呢?万国码的创想又怎么能够实现?


        为了解决这个问题,utf-8    utf-16    utf-32相继诞生

3.utf-8

        utf-8机智地使用了变长编码方式。具体如下:


NULLUnicode码范围utf-8编码填充模板
一区0000 0000~0000 007F0xxxxxxx
二区0000 0080~0000 07FF110xxxxx 10xxxxxx
三区0000 0800~0000 FFFF1110xxxx 10xxxxxx 10xxxxxx
四区0001 0000~0010 FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx



可以看出:一区的字符都是采用一个字节编码,而一区的字符就是原来的ASCII字符,所以utf-8是兼容ASCII的,因此一个纯粹的ASCII码文件也能被考虑为一个UTF-8 文件, 而且一个碰巧只使用ASCII码字符的 UTF-8 文件和拥有同样字符的ASCII码文件是相同的。

再来看三区,这个区集中了大部分的中文编码。

根据Unicode的汉字编码查询表(http://bianma.supfree.net/sos.asp?id=14)可知,汉字”中“的Unicode编码为:0X4E2D,而 0X4E2D   在  0000 0800~0000 FFFF这个范围内,所以,将”中“的Unicode编码的二进制

100111000101101   从低位到高位 从后往前填充 到 对应utf-8模板  1110xxxx 10xxxxxx 10xxxxxx   中,取代里面的  'x'  ,填充后若有多余的 ‘x’  用 0 取代之,得到的二进制数据   11100100 10111000 10101101 就是"中"的utf-8编码,用16进制表示就是:

\xe4\xb8\xad


也就是说:unicode提供了各种字符的编码值,也可以叫做代号,一个字符有一个独一无二的值,这个值正是unicode确定的。
而utf-8则是提供了字符在内存中的编码和解码方案。


utf-8引擎如何解码?

这是我一直在想的问题,下面是我的猜测。如有不对之处,敬请批评指正。

ASCII码字符都只占一个字节,所以解码ASCII很方便,只需要读取一个字节的数据,翻译为字符,再读取一个字节的数据,翻译为字符。。。。。

可是,utf-8是变长编码,它怎么知道要下一个字符需要读取几个字节来翻译为一个字符呢?


我们可以把红色框框(也就是一个字符utf-8编码的第一个字节)看作”组长”,后面的连续的字节看作“小组普通成员”。那个,这个小组一共有多少人,都包含在组长的信息里面。

一区的组长的最高位是0,就暗含信息:我这个组只有我一个人,那么utf-8引擎在解码的时候就只去读这一个字节,完成翻译。

二区的组长最高为位有2个1,暗含信息:我这个组有2个人,那么utf-8引擎在解码的时候就只去读这2个字节,完成翻译。

三区的组长最高为位有3个1,暗含信息:我这个组有3个人,那么utf-8引擎在解码的时候就只去读这3个字节,完成翻译。

:

:

同时,为了防止数据损坏而造成数据丢失,每个普通成员字节的前2位都是10,来标识自己是成员身份。




Shapefile字段命名终极指南:从3汉字到5汉字的编码改造实战 本文深入解析了Shapefile字段命名中“三汉字”限制的根源,即DBF文件10字节上限与UTF-8/CP936编码方案的差异。通过对比ArcGIS与QGIS的处理策略,并提供一个安全的Python自动化脚本,指导用户将编码从UTF-8转换为CP936,从而将中文字段名长度上限从3个汉字扩展至5个汉字,同时避免属性值乱码风险。 阅读详情

相关推荐

【编码探秘】从“烫烫烫”到“锟斤拷”:一个Unicode乱码生成器的诞生

本文深入探讨了Unicode乱码现象,特别是经典乱码'锟斤拷'的生成原理。通过分析UTF-8与GBK编码转换的机制,揭示了乱码产生的根本原因,并提供了Python实现的乱码生成器代码示例。文章还介绍了乱码的趣味应用场景和编码最佳实践,帮助开发者更好地理解和处理字符编码问题。

weixin_42565652的博客 562

UTF-8 编码格式(python)

utf-8简介 UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,由Ken Thompson于1992年创建,现在已经标准化为RFC 3629。UTF-8用1到4个字节编码Unicode字符。用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。 计算机中使用1-6个字节表示一个UTF-8字符;大多数......

小胖_@的博客 3万+

Python爬虫遇到‘utf-8‘解码失败?手把手教你用chardet库自动检测编码(附requests实战)

本文详细介绍了如何使用Python的chardet库智能解决爬虫中的UTF-8解码失败问题。通过实战案例和最佳实践,帮助开发者动态检测网页编码,提升爬虫的稳定性和解析成功率,特别适用于处理多编码混合的复杂场景。

weixin_42662293的博客 105

【Python】新手入门(5):# -*- coding: UTF-8 -*- 的作用详解

📚【Python新手入门】一文详解`# -*- coding: UTF-8 -*-`的作用!💡 编码声明在Python中至关重要,确保字符正确显示。📜 文章教你如何正确使用`# -*- coding: UTF-8 -*-`,避免乱码问题。🔍 还有方法教你如何确定文件编码。📖 总结与回顾让你更好地掌握编码知识。🤝 与你共同进步,探索Python的无限魅力!#Python编码声明 #UTF8编码 #Python新手入门 #乱码问题解决方案

创作高质量博文,分享知识,共同进步! 6768

python UTF-8解码及脚本头的标注

python的解码utf-8及脚本头注释

NLP与推荐算法 1841

UTF-8 vs UTF-8MB4:解锁字符编码的终极谜题,一文带你跨越表情障碍

🔥关注墨瑾轩,带你探索Java的奥秘🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀在字符编码的奇幻世界里,UTF-8和UTF-8MB4这对看似相似却又不同的“双胞胎”,常常让人傻傻分不清。别怕,今天我们就来一场说走就走的解谜之旅,深入字节森林,揭开它们的神秘面纱。带上你的探险帽,咱们出发!

java专栏 738

python的默认编码(UTF-8)

字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。...

s1737235537的博客 5418

[华为]华为无线控制器AC6508简单配置实例

用户需求:3个地址段,分别是领导、员工、访客,访问控制策略是只允许访客上网,不允许访客访问内网。 vlan173为设备的管理地址和AP获取的地址,领导、员工、访客的vlan分别是vlan131/vlan132/vlan133 首先是许可的下载,使用华为的账号登陆http://app.huawei.com/isdp ,然后按照说明输入许可,下载许可,将许可导入到设备。 web界面访问后,直接按照配置向导配置就可以了。 1.基本配置里主要配置license、设备名称、设备时间 2.端口配置:连接上

日子_很简单 2万+

Python 源代码编码强制使用 UTF-8 的利弊

Python 是一种流行的编程语言,它可以运行在多个平台上,例如 Windows、Linux 和 macOS 等。在不同的平台上,对源代码的编码方式可能会存在差异。传统的做法是,在 Python 源代码文件的开头添加来显式指定源代码的编码方式为 UTF-8。这种做法可以确保在不同的平台上都能正确解读和执行 Python 源代码。近年来,随着 Unicode 的普及,越来越多的开发人员开始倡导强制使用 UTF-8 作为 Python 源代码的默认编码方式。

D0126_的博客 959

牛顿法vs高斯牛顿法vs LM算法:三行代码说清核心区别(附性能对比表格)

本文通过对比牛顿法、高斯牛顿法和LM算法的核心迭代代码,揭示了三者在非线性最小二乘优化中的本质区别。LM算法通过引入阻尼因子,在高斯牛顿法的快速收敛与梯度下降的稳定性之间取得平衡,成为工程实践中鲁棒性最强的首选。文章还提供了清晰的性能对比表格,帮助开发者根据初始估计和问题性质快速选择合适算法。

weixin_29062255的博客 420

11-4 AEB 算法原理及系统组成

本专题旨在探讨如何利用仿真软件开发自动紧急制动系统AEB,主要通过整理开发流程,实现从需求到验证的全流程掌握,为后续开发提供支持;同时,研究了如何在汽车自动驾驶仿真工具中开发自己的算法,并解决了从ISO、E-CNAP、GB/T以及交通法规等提炼出功能需求的问题,以快速实现原型模型的开发。本专题重点讲解了AEB的工作原理、系统/软件架构和需求、算法模型及实现、CCRs/CCRb/CCRm建模与仿真、VRU-AEB-B/P/M建模与仿真,同时还提供了测试用例,期待将AEB算法成功地产品化。

AIgraphX 8557

深入解析:Unicode 与 UTF-8 在 Python 中的秘密武器

引言 字符编码是计算机科学中的一个重要领域,它定义了如何将人类可读的文字转换为机器能够理解的形式。随着互联网的发展,不同的语言和符号需要在全球范围内共享,这就对字符编码提出了更高的要求。Unicode标准就是为了满足这种需求而诞生的,它提供了一套统一的字符集,几乎涵盖了所有现代语言以及许多古代文字。而UTF-8(8位通用转...

cnzzs的博客 807

【七】Hadoop3.3.4基于ubuntu24的分布式集群安装

本次安装实验基于苹果m2芯片的mac系统,使用vmware fusion搭建三台ubuntu24分布式虚拟机,确保在三台机器上安装了Java jdk8,并配置了免密码登录,网络互通,防火墙关闭,授时服务器已经同步。访问apche官网源,下载3.3.4版本,我们用二进制通用版即可,因为hadoop运行在java环境,跨平台性使得无需编译arm架构版本。至此,Hadoop的安装完成,包括hdfs文件存储系统,mapreduce计算框架,yarn资源管理系统均能正常、稳定使用。

qq_31412425的博客 2161

Day02-8 Python解码字符的秘密:从ASCII到UTF-8的奇妙之旅

想象一下,如果你要和外星人通信,你会选择如何表达你的意思?显然,你得找到一种“地球语言”和“外星语言”都能理解的方式,而这就是字符编码在计算机世界里的作用!早期的计算机可以说是一个“英语霸权分子”,它们只能理解127个字符的“小圈子”,包括大小写英文字母、数字,以及一些符号。没错,早期的ASCII编码就是这样冷漠,完全无视了其他语言的存在。更妙的是,UTF-8 兼容 ASCII,历史遗留的代码直接“躺赢”,连网页也都能轻松过渡。终于,Unicode站了出来,高喊:“让我们一起统一编码吧!

max202011161630的博客 860

Librepilot _64位window10环境下的搭建及一些坑的解决办法

  刚入IT行业的小菜鸟,在window上折腾了四天的librepilot地面控制站的搭建,想着这么辛苦不能白费了,看网上相关资料少得可怜,唯一一个详细教程还是在32位环境下,一大堆坑,所以把自己的经验写下来,供大家一起参考。 参考的原文是:https://www.cnblogs.com/jasonchan1202/p/7809937.html的博客,但是执行下来才发现这个博客对64位系统极其不...

weixin_41426339的博客 2728

Cluster Computing投稿

在overleaf中新建picins.sty文件,该文件是导入的包在.tex文件中添加以下内容\usepackage{picins}%实现作者简介%下边这块有几个人复制几段\vspace{0\baselineskip} %这一行控制作者间隔,可视情况改数字!!!!!!!!

这里是萤石ym的学习路途,努力搬砖! 5539

编码的秘密(python版)

编码(python版) 最近在学习python的过程中,被不同的编码搞得有点晕,于是看了前人的留下的文档,加上自己的理解,准备写下来,分享给正在为编码苦苦了挣扎的你。 编码的概念 编码就是将信息从一种格式转换成另一种格式,计算机只认识二进制,简单的理解,将我们眼睛看到的文字转换为计算机能够识别的二进制格式视为编码,而二进制以某种编码格式转换为我们能看的文字的过程可以看成是解码...

dengmozheng3391的博客 562

【开关电源篇】开关电源——只需这三个阶段,从电源小白到维修大神

🔌 该篇为的原创文章跳转目录,小二持续更新跳转链接,尽情关注!

2301_81299416的博客 2398

Python常用字符编码

字符编码的常用种类介绍   第一种:ASCII码     ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。如下图所示:   由于计算机是美国人发明的,因此...

Amdy_amdy的博客 587

【Bug已解决】claude: No such file or directory — Claude Code 命令凭空消失解决方案

方案适用场景推荐指数难度方案一:重建软链接所有平台,软链接断裂⭐⭐⭐⭐⭐低方案二:修复 shebangnvm 用户,不想重装⭐⭐⭐⭐中方案三:nvm default aliasnvm 用户,长期稳定⭐⭐⭐⭐低方案四:切换到 Volta频繁切换 Node.js 版本⭐⭐⭐中方案五:修复 PATHPATH 配置丢失⭐⭐⭐⭐低方案六:Homebrew 安装macOS 用户,npm 不稳定⭐⭐⭐⭐低根本原因与。

博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

AudioSeal Pixel Studio保姆级教学:十六进制消息与Base64/UTF-8编码互转工具链

本文介绍了如何在星图GPU平台上自动化部署专业级音频水印加印AudioSeal Pixel Studio镜像,并详细讲解了其核心应用场景:通过十六进制消息与Base64/UTF-8编码互转工具链,为音频作品(如音乐、AI生成语音)便捷地嵌入版权声明、追踪代码等数字水印信息。

weixin_28999139的博客 392

SAP B1中文培訓教材_SDK

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

【趣味阅读】Python 文件头的秘密:从编码声明到 Shebang

本文解析了Python文件头常见两行注释的含义和规范。# -*- coding: utf-8 -*-是Python2时代用于指定编码的声明,Python3默认UTF-8后可省略;shebang行#!/usr/bin/env python3让脚本在Unix系统可直接运行。文章还揭示了shebang一词源于#(hash)和!(bang)的组合,展现了Unix黑客文化的幽默。最后指出这些写法多是历史遗留,现代Python3项目可酌情简化。

夏侯依风 的博客 1122

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

python编码问题

python requests 的content和text区别 html = requests.get('xxxxxx',cookies=cookies).text html = requests.get('xxxxxx',cookies=cookies).content 那r.text与r.content有什么区别呢? 分析requests的源代码发现,r.text返回的是Uni

summer6364的博客 309

彻底解决Python文件读取UnicodeDecodeError:编码原理与实战方案

字符编码是计算机存储和处理文本的基础规则,它将字符映射为二进制字节序列。不同编码标准如ASCII、GBK和UTF-8采用不同的映射方案,导致跨环境文件读取时易出现解码错误。理解编码原理对于数据处理、日志分析和系统交互至关重要,能有效避免数据乱码和程序崩溃。本文聚焦Python中常见的UnicodeDecodeError问题,通过分析GBK与UTF-8编码冲突的根源,提供从诊断、排查到解决方案的完整实践指南,涵盖网络爬虫、批量日志处理等典型应用场景,帮助开发者构建健壮的文件处理流程。

weixin_30219613的博客 342

python bytes str_Python中的str与bytes

在Python中,bytes和string是不同的东西。由一系列不可改变的Unicode字符组成的叫string。而一系列不可改变的介于0-255之间的数字被称为bytes对象。unicode是一种编码标准,具体的实现标准可能是utf-8,utf-16,gbk ……python 在内部使用两个字节来存储一个unicode,使用unicode对象而不是str的好处,就是unicode方便于跨平台。U...

weixin_39889788的博客 102
上一篇: python对象数据的读写权限
下一篇: python 之 range()
love1code
博客等级 码龄12年 19粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值