深入理解python字符编码(包含2.x与3.x)

引子

计算机要想工作必须通电,即用‘电’驱使计算机干活,也就是说‘电’的特性决定了计算机的特性。电的特性即高低电平(人类从逻辑上将二进制数1对应高电平,二进制数0对应低电平),关于磁盘的磁特性也是同样的道理。

结论:计算机只认识数字,很明显我们平时在使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果也无非是在文件内写了一堆字符),

如何能让计算机读懂人类的字符?必须经过一个过程:

  字符--------(翻译过程)------->二进制数字010101  这个过程实际就是一个字符如何对应特定数字的标准,这个标准称之为字符编码。实际上是一种对应的规则

历史的变化

  • ASCII

美国标准信息交换代码(American Standard Code for Information Interchange)的缩写, 为美国英语通信所设计。它由128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)组成。

python2只支持ASCII码,开始阶段使用7位二进制数表示——数字/字母/特殊字符,即是2**7 == 128,后来改为了用8位来表示,所以ASCII码的第一位都是0开头。2**8 = 256个字符。

  • unicode

随着计算机在各个国家的普及,各个国家的语言在计算机中的应用,不得不从新规划一种编码,这种编码可以对应几乎世界上所有国家的语言文字与一些特殊字符,此时unicode出现了,刚开始使用16位2个字节来表示字符,2**16 == 65536 ,可以有这么的多的表示个数。但是由于中文的原因,事实上这也是不够的。在python2中,使用的是16位的unicode,但是在python3中,就开始统一使用32位4个字节来表示字符,2**32 ==4294967296,完全足够表示所有的字符。由于unicode必须要兼容所有国家的语言,所以他必须以消耗大量的内存来换取兼容性。由此,一种可变长的编码规范utf-8,utf-16诞生。

  • utf-8

全称:UTF-8(8-bit Unicode Transformation Format)。

是一种针对Unicode的可变长度字符编码,又称万国码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码Unicode字符。用在网页上可以统一页面显示中文简体繁体及其它语言。简单理解,他可以针对不同的字符,采用不同字节数1~6个来表示,这样可以达到兼容性和节省空间。而8位1个字节表示的utf-8是对ASCII码友好的,所以使得utf-8迅速的流行起来,不过由于中文文字复杂而且多的特点,gkb编码规范出现,但是只是针对中文。

  • gbk

GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification)。GBK 向下与 GB 2312 编码兼容。GBK是采用单双字节变长编码,英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码

具体编码方式

unicode: 16位 2个字节 由于中文原因 ---> 32位 4个字节 表示一个字符

utf-8: 英文字母数字特殊字符  8位 1个字节 表示一个字符

       欧洲 16位 2个字节 表示一个字符

   中文 24位 3个字节 表示一个字符

gbk:英文数字特殊字符 8位 1个字节

    中文 16位 2个字节

拓展:字节与位的关系

通常用bit来作数据传输的单位,因为物理层,数据链路层的传输对于用户是透明的,而这种通信传输是基于二进制的传输。在应用层通常是用byte来作单位,表示文件的大小,在用户看来就是可见的数据大小。比如一个字符就是1byte,如果是汉字,则是2byte。

Bit意为“位”或“比特”,是计算机运算的基础,属于二进制的范筹;

Byte意为“字节”,是计算机文件大小的基本计算单位;

八位表示一个字节1byte == 8bit1024byte == 1kb1024kb == 1MB1024MB == 1GB1024GB == 1TB

原文地址:https://www.cnblogs.com/py-coder/p/10036429.html

时间: 2024-10-30 10:55:45

深入理解python字符编码(包含2.x与3.x)的相关文章

Python字符编码很难吗?今天一文带你深入!从此不再疑惑!

不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError.UnicodeDecodeError 错误,每当遇到错误我们就拿着 encode.decode 函数翻来覆去的转换,有时试着试着问题就解决了,有时候怎么试都没辙,只有借用 Google 大神帮忙,但似乎很少去关心问题的本质是什么,下次遇到类似的问题重蹈覆辙,那么你有没有想过一次性彻底把 Python 字符编码给搞懂呢? 完全理解字符编码 与 Python 的渊源前,我们有

Python字符编码详解(转)

1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号.不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础. 1.2. MBCS 然而计算机世界里很快就有了其他语言,单字节的ASCII已无法满足需求.后来每个语言就制定了一套自己的编码,由于单字节

python字符编码惯用法

本文总结在实际应用中遇到的python字符编码问题,制定一套编码相关的约定,避免编码上的错误. 在写猥琐宝典时需要总结soj上做过的题,准备在总结过程中顺便写一个soj上的题解.题解使用python可读,也就是python可以直接eval的格式,以便于处理.写题解老是copy soj上的题目id,title不是太方便,所以就准备自动生成一个空的题解,里面包含了我做过的题.然而直接从soj上只能拿到自己过了的题的id列表,缺乏其它信息.缺乏的信息可以抽象为soj数据库,其中包含了一个以id为主键的

更改python字符编码以便使用UTF-8的编码url路径

url编码分两种, 一种是unicode, 另一种是gb2312, 今天遇到的一个网站是要将字符编码按照gb2312来编码,用来得到一个先填写blanks后再返回页面的数据,废话少说,需要做的就是先查看你的python的编码是啥,默认是ascii, ? 1 2 3 import sys print sys.getdefaultencoding() # 'ascii' 直接附代码吧: ? 1 import urllib as com ? 1 2 3 4 5 6 7 8 9 10 11 12 13

python 字符编码处理问题总结 彻底击碎乱码!

Python中经常遇到这样的字符编码问题,尤其在处理网页源码时(特别是爬虫中): UnicodeDecodeError: 'XXX' codec can't decode bytes in position 12-15: illegal multibyte... 下面以汉字'哈'来解释作示例解释所有的问题,汉字"哈"的各种编码如下: 1  UNICODE(UTF8-16): 0xC854 2  UTF-8: 0xE59388 3  GBK: 0xB9FE 除此之外还有如gb2312,

python 字符编码练习

通过下面的练习,加深对python字符编码的认识 # \x00 - \xff 256个字符 >>> a = range(256)>>> b = bytes(a) # 不用参数encoding >>> b b'\x00\x01\x02 ... \xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff' >>> b.decode('utf-8') # 报错 Traceback (most recent call l

第七章、Python字符编码

第七章.Python字符编码 一.定义 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的英文.汉字等字符是二进制数转换之后的结果.通俗的说,按照何种规则将字符存储在计算机中,如'a'用什么表示,称为"编码":反之,将存储在计算机中的二进制数解析显示出来,称为"解码",如同密码学中的加密和解密.在解码过程中,如果使用了错误的解码规则,则导致'a'解析成'b'或者乱码. 字符(Character):是一个信息单位,在计算机里面,一个中文汉字是一个字符,一个英

python --- 字符编码学习小结

上半年的KPI,是用python做一个测试桩系统,现在系统框架基本也差不多定下来了.里面有用到新学的工厂设计模式以及以及常用的大牛写框架的业务逻辑和python小技巧.发现之前自己写的代码还是面向过程思想的多,基本没有面向对象的思想,近半年看的代码给了很大的触动,我需要升级我的技能了,于是也花了挺多时间在这个KPI学习上,现在先总结下在做这个系统时我所面临到的python的字符编码问题. 字符编码问题,如果处理有问题,可能直接就报错了:如果处理不得当,中文就会显示乱码.这是最初接触字符编码遇到问

理解Python中编码的应用

完全理解字符编码 与 Python 的渊源前,我们有必要把一些基础概念弄清楚,虽然有些概念我们每天都在接触甚至在使用它,但并不一定真正理解它.比如:字节.字符.字符集.字符码.字符编码. 字节 字节(Byte)是一个抽象出来的计算机测量单位.8个0和1组成的二进制数据称为1个字节(1Byte=8bits).字节是计算机中数据存储的基本单元. 计算机中的所有数据,不论是保存在磁盘文件上的还是网络上传输的数据(文字.图片.视频.音频文件)都是由字节组成的 字符 字符(Character)也是一个抽象