说起python编码,真是句句心酸,今天终于是,终于梳理清楚了,下面我们就来一起揭开py编码的真相吧!

一,什么是编码?

其实基本概念很简单。我们都知道消息,那么消息就是人类所能理解的,简单易懂的存在,那么我将这种存在表示为“明文”。我们把写在纸张上的英文单词看做“明文”,那么对于不懂英文的人来说,就需要翻译成他所能看懂的语言格式。这种从明文到编码文件的转换称为“编码”,从编码文本转换成"明文"称为“解码”.

那么到底什么是编码呢?

其实计算机所能识别的所有的数据文件,都是以二进制文件存在的。也就是说计算机想要执行我们发出的指令,就必须把文件编码成二进制文件才能运行。意味着我们认识的字符要对应唯一的二进制数字,那么老外用0和1来表示二进制的数字。8位表示一组就能表示出256中不同的状态,每种状态就表示唯一的字符。英文只有26个字母,加上一个符号足够用了,每个0或者1表示一个比特位,约定8个比特位构成一个字节,而计算机需要用127个不同的字节来存储英文单词,这就叫ASCII编码。

扩展ANSI编码
刚才说了,最开始,一个字节有八位,但是最高位没用上,默认为0;后来为了计算机也可以表示拉丁文,就将最后一位也用上了,
从128到255的字符集对应拉丁文啦。至此,一个字节就用满了!

当计算机来到中国的时候,不识别中文,无法显示中文,而且一个字节的所有的状态位都被占满了,那怎么办呢?中国人直接把表示最后一位的阿拉丁文给干掉了,规定一个小于127的字符,并且意义和原来的一致,当两个大于127的字符连在一起的时候,就组成的汉字,这样大概能组成7000多汉字,这就叫“GB2312”,是对ASCII的中文扩展.

但是汉字太多了,BG2312也不够用啊,于是就规定只要第一个字节大于127的,就固定表示这是一个汉字的开始,不管后面跟的是不是扩展集里面的内容。这种扩展之后的方案叫做"GBK",GBK包含了所有GB2312的内容.同时也增加了20000多个汉字和符号.

那么在国内我们的问题解决了,同样的其他国家遇到的问题也解决了,但是国家和国家之间的语言交互还是无法识别的,怎么办呢?所以国际标准化组织就把所有国家的编码格式汇总到一起,搞了个号称标准编码的码表,叫UNICODE.

UNICODE是用两个字节来表示为一个字符,它总共可以组合出65535不同的字符,这足以覆盖世界上所有符号(包括甲骨文)

为啥又有一个UTF-8呢?

大家想一下,对于英文界的人来说,存储一个字母A用00010001就足够了,但是用上了UNICODE之后需要00000000 00010001表示才行,显得很浪费啊,基于此,科学家又提出了UTF-8,这是一个可变长度的编码,他可以用1~4个字节表示一个符号,可根据符号的长度而变化字节长度。当字节在ASCII范围内的时候,就表示一个字节,所以就兼容ASCII码的。

这样的好处:

虽然我们在内存中存储的数据都是unicode,但是当数据要保存到磁盘或者网络传输的时候,显然uft8就比较节省空间了。

unicode和utf-8的区别或者关系是什么呢?

unicode是内存编码表示规范方案,而utf-8是如何保存和传输unicode的实现方案。

在py2中有两种字符串类型,一种是str,一种是unicode,这两种数据类型在程序运行时的内存地址是什么呢?

>>> s1 = '电'   #字符串

>>> print(type(s1))
<type 'str'>   #类型
>>> print(repr(s1))   #repr查看内存存储内容
'\xe7\x94\xb5'   #内存中的内容
>>> s2 = u'电'
>>> print(type(s2))
<type 'unicode'>   #unicode类型
>>> print(repr(s2))
u'\u7535'     #内存中的内存

内置函数repr可以帮我们在这里显示存储内容。原来,str和unicode分别存的是字节数据和unicode数据;那么两种数据之间是什么关心呢?如何转换呢?这里就涉及到编码(encode)和解码(decode)了

需知:

1.在python2默认编码是ASCII, python3里默认是unicode

2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

python之字符编码与转码的更多相关文章

  1. Python基础-字符编码与转码

    ***了解计算机的底层原理*** Python全栈开发之Python基础-字符编码与转码 需知: 1.在python2默认编码是ASCII, python3里默认是utf-8 2.unicode 分为 ...

  2. Python中字符编码及转码

    python 字符编码及转码 python 默认编码 python 2.X 默认的字符编码是ASCII, 默认的文件编码也是ASCII python 3.X 默认的字符编码是unicode,默认的文件 ...

  3. python(字符编码与转码)

    一.字符编码演变史 二进制(0 1) """ 算机中的所有数据,不论是文字.图片.视频.还是音频文件,本质上最终都是按照类似 01010101 的二进制存储的,再说简单点 ...

  4. Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数

    1.        集合 1.1      特性 集合是一个无序的,不重复的数据组合,主要作用如下: 去重,把一个列表变成集合实现自动去重. set可以看成数学意义上的无序和无重复元素的集合,因此,两 ...

  5. 【python】-- 字符串、字符编码与转码

    字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可:访问子字符串,可以使用方括号来截取字符串: var1 ...

  6. python基础之 列表、元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...

  7. 小白的Python之路 day2 字符编码和转码

    字符编码和转码 详细文章: http://www.cnblogs.com/yuanchenqi/articles/5956943.html http://www.diveintopython3.net ...

  8. Python字符编码与转码

    字符编码与转码 注: 该图转自 http://www.cnblogs.com/luotianshuai/p/5735051.html. Python2 解码,编码 #Python2 #-*- codi ...

  9. Python的字符编码

    Python的字符编码 1. Python字符编码简介 1. 1  ASCII Python解释器在加载.py文件的代码时,会对内容进行编码,一般默认为ASCII码.ASCII(American St ...

随机推荐

  1. 达拉草201771010105《面向对象程序设计(java)》第十六周学习总结

    达拉草201771010105<面向对象程序设计(java)>第十六周学习总结 第一部分:理论知识 1.程序与进程的概念: (1)程序是一段静态的代码,它是应用程序执行的蓝 本. (2)进 ...

  2. 通过python脚本读取多台虚机硬件信息

    主要通过fabric模块实现 import fabric ''' hosts = [] ,): host = "192.168.75." + str(i) hosts.append ...

  3. JS逆向某网站登录密码分析

    声明: 本文仅供研究学习使用,请勿用于非法用途! 目标网站 aHR0cHM6Ly9hdXRoLmFsaXBheS5jb20vbG9naW4vaW5kZXguaHRt 今日目标网站是某知名支付网站,感觉 ...

  4. Ado.net 02

    1.连接字符串不同,连接池也不同 SqlConnection对象只能被打开一次.但是在Close()后再进行Open()操作.但是在Dispose()之后就不能再Open()了. 2.SqlDataA ...

  5. node--静态服务器

    1.同步读取文件 const data = fs.readFileSync('./model/mime.json');   // 这里是添加了可以正常链接其他格式文件的服务器 const http = ...

  6. 从web现状谈及前端性能优化

    从web现状谈及性能优化 原文出处:<Karolina Szczur: The State of the Web> 性能优化指南The Internet is growing expone ...

  7. proxyTable的配置

    在dev环境下面: proxyTable: { '/api': { target: 'http://api.douban.com/v2', //主域名,以前我都写192.168.2.57:80,这里跨 ...

  8. 前端面试题(HTML、CSS部分)

    HTML.CSS部分: 一.html5有哪些新特性.移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?   新特性: HTML5 现在已经不是 SGML 的 ...

  9. [Tensorflow-CPU完整安装过程-Win10]新手各种踩过的坑

    流程介绍:先安装Anaconda(不同Python版本对于Anaconda不同!!见图),然后就是在Anaconda Prompt里面安装Tensorflow即可. 环境介绍:Anaconda3-4. ...

  10. Unity C# Scoket Thread

    关于 Scoket和Thread 也没什么要说的,网上有很多资料.但是需要注意的是 Scoket和Thread 都需要创建和杀死.不然一定会造成程序假死.好了上代码 服务器: using System ...