专栏首页叶子陪你玩编程python字符的编码与解码

python字符的编码与解码

什么是字符编码

计算机里面是由各种电子电路组成的,它是如何识别我们的写的字符的,比如hello ,你,我。

直接识别是不可能,它只能识别 二进制的0,1字符。所有我们输入进去的字符,最终都会被转化成0,1这种组合在一起的一串数字。

计算机存储信息的最小单位,称之为位(bit),又叫比特,二进制的一个“0”或一个“1”叫一位。

8个二进制位组成1个字节(Byte),1024字节(Byte)也就是1KB,1024KB是1M,这就是我们平常说的文件大小的单位(M),比如这个图片大小5M。

既然计算机是通过二进制的数字来识别不同字符的,那不同的字符该用多少个1和0,又该以什么样的顺序来排列呢?

为什么要字符编码

这里为了规范,就出现了ASCII编码。ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。

这里的编码规定了,每个字符由几个0和1组成,顺序也定下了。里面包含了控制字符或通信专用字符,阿拉伯数字,大小写英文字符,标点运算符号等,一共128个。

32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

了解进制数

进制也就是进位计数制,是人为定义的带进位的计数方法。对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。

下面就来通过python中自带的函数一起来验证一下。

理解:

ord() 函数:以一个字符串作为参数,返回对应的 ASCII 数值。

chr()函数:用一个整数作参数,返回一个对应的字符。可以二进制,十进制,十六进制。

不理解进制数的可以自己去学习一下,或者利用python自带的进制转换函数去试一下。

0b 开头表示二进制,0o表示八进制,0x表示十六进制,通过内置进制函数可以相互进行转换。

Hello这样的一个词语要被计算机认识,只要按照ASCII编码来就可以了。对应的16进制编码是:48 65 6C 6C 6F

编码的种类

百度百科:

在英语中,用128个符号编码便可以表示所有,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用 ASCII 码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号 [5] 。 但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0--127表示的符号是一样的,不一样的只是128--255的这一段 。 至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是 GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示 256 x 256 = 65536 个符号 。

因为ASCII不够用了,所以需要扩展字符集。

百度百科:

不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、ShiftJIS 等各自的编码标准。这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI 编码代表 ShiftJIS 编码。[1] 简单的说,在简体中文系统下,ANSI编码代表GB2312编码;在日文操作系统下,ANSI编码代表JS编码。[2] 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。ANSI编码表示英文字符时用一个字节,表示中文用两个或四个字节。

但是这么多编码,很混乱,不同 ANSI 编码之间互不兼容,不同语言交流时会出现乱码。为了统一所有文字的编码,Unicode诞生了。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

虽然统一了所有字符,但是在存储和传输的时候,也带来了一些缺点,如果你传输的都是英文字符,使用unicode编码就会使用更多的字节,所以后面实现了utf-8编码,可以根据字符的情况进行可变的字节表示。

在文件保存的时候,其实是可以看见有编码选择的,平时可能不是很关注,读写文件出现编码格式错误,就可以从这方面来思考解决。

编码和解码

utf编码读取文件

ANSI读取文件/gbk

utf-8 带 bom读取

忽略错误会出现乱码

使用utf-8-sig编码可以解决这个问题

encode:将 Unicode 字符串转换为特定编码格式对应的字节码的过程

decode:将特定编码格式的字节码转换为对应的 Unicode 字符串的过程

Python3 的默认编码为 Unicode。

编码检测

有时候解码格式报错,但是我们并不知道它是什么编码,那该怎样解码?可以通过chardet这个模块来检测我们文件数据的一个编码格式,结果会显示可信度。

(全文完)


本文分享自微信公众号 - 叶子陪你玩编程(gh_cd062460d25e),作者:青叶子

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python开发编码规范

    4个空格一个缩进层次,永远不要混用制表符和空格. 最流行的Python缩进方式是仅使用空格, 其次是仅使用制表符.

    用户7054460
  • python数据分析-生成随机数据文件

    数据分析肯定需要数据,这个数据一般都是来自实际学习工作业务中的,比如学校的学生成绩,淘宝京东的销售数据,视频网站不同种类的视频播放点击量等。

    用户7054460
  • 【tkinter系列 第一课 创建主窗口及Label部件 】

    python中通常我们写程序,显示结果和操作都是在终端区,如果要想实现一个有显示界面的程序那该怎样实现呢?python中有好几个库都可以实现,这个系列我们一起来...

    用户7054460
  • 基于MCMC的X265编码参数优化方法

    新一代视频编码标准,包括高效视频编码HEVC和音频视频编码标准AVS2近年来已被提出以进一步提高H.264/AVC编码标准的压缩性能。在相同的主观视觉的前提下,...

    用户1324186
  • ERP系统物料编码十大原则

    物料编码对于制造类企业供应链管理作用不可说不巨大,影响不可谓不深远,甚至是任何一个ERP系统优化不得考虑的关键环节!然而,影响编码原则的因素有很多,但归根结底就...

    SAP斯凯普斯 Qasim
  • 《5》python字符串和编码

    「5」python字符串和编码 ? 字符编码 最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大...

    企鹅号小编
  • 深入浅出地,彻彻底底地理解python中的编码

    python处理文本的功能非常强大,但是如果是初学者,没有搞清楚python中的编码机制,也经常会遇到乱码或者decode error。本文的目的是简明扼要地说...

    用户1332428
  • NAB 2019见闻:CAE视频编码与QoE

    https://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=131182

    LiveVideoStack
  • iOS开发-音视频开发

    5G网络作为第5代的移动通信网络,它的网络峰值传播速度可1以达到10Gbps/s.这比4G的的传输速度快数百倍.举个例子,整部超高画质电影下载可在1秒钟之内下载...

    CC老师
  • base16,base32,base64 编码方式的通俗讲解

    base16,base32,base64 都是编码方式,对应有各自的一套编码算法。

    林冠宏-指尖下的幽灵

扫码关注云+社区

领取腾讯云代金券