说起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. C#中使用 正则表达式 替换img中src路径但保留图片名

    text = Regex.Replace(text, @"(?i)(?<=<img\b[^>]*?src=\s*(['""]?))([^'"& ...

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

    达拉草201771010105<面向对象程序设计(java)>第八周学习总结 实验六接口的定义与使用 实验时间 2018-10-18 1.实验目的与要求 (1) 掌握接口定义方法: (2) ...

  3. jquery-购物车js

    购物车示例js,为了方便参考,页面写的比较简单.示例如下图所示: html代码如下: <!doctype html> <html lang="en"> &l ...

  4. Access Token 机制详解

    我们在访问很多大公司的开放 api 的时候,都会发现这些 api 要求传递一个 access token 参数.这个参数是什么呢?需要去哪里获取这个 access token 呢? access to ...

  5. 使用Navicat Premiun远程连接MySQL失败,报错(10038)

    远程连接MySQL失败,可能有一下原因: 1.小伙子/小姑凉注意一下你的ip是否输入正确了!! 2.网络或防火墙问题 1).排查网络问题 使用命令:ping 192.168.1.1 查看网络请求是否超 ...

  6. 有关vue中用element ui 中的from表单提交json格式总是有冒号的问题解决办法

    因为后台要求要传递JSON格式的数据给他,然后我转了之后总是多了冒号,后来又看了自己的报错,原来是报了404错误,说明路径找不到, 数据格式 后来发现怎么都不行了,然后突然查看了报错报的是404,说明 ...

  7. 深入理解 vertical-align 属性

    语法 用来指定行内元素或表格元素的垂直对齐方式 相对父元素的值 baseline 使元素的基线与父元素的基线对齐.HTML规范没有详细说明部分可替换元素的基线,如textarea,这意味着这些元素使用 ...

  8. 超强图文|并发编程【等待/通知机制】就是这个feel~

    你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough ...

  9. R|tableone 快速绘制文章“表一”-基线特征三线表

    首发于“生信补给站” :https://mp.weixin.qq.com/s/LJfgxbTqsp8egnQxEI0nJg 生物医学或其他研究论文中的“表一”多为基线特征的描述性统计.使用R单独进行统 ...

  10. js 验证输入框是否为空

    很多时候,菜鸟在对输入框是否输入值进行验证时,总会把输入“空字符串”这一状况给忽略掉.嗯,我就这样,所以记下,以后回忆下还是不错滴 <input type="text" id ...