首先了解一下历史,但是本篇文章冗杂,如老太太裹脚布----------又臭又长

编码历史:

1. 计算机只能处理数字,文本文件只有转换为数字
    才能处理。8bit==1字节 所以一个字节能表示的最大的数就是255
    
    2. 美国人发明计算机。用英语,所有一个字节就表示了所有字符
    就是ASCII(一个字节) 编码就是美国人的标准编码
    
    3. 当中国人使用计算机时,需要表示中文字符,于是就发明了
    GB2312的编码格式,即用两个字节表示一个汉字。同理,其他语言国家
    也就创建了自己相应的编码。没有一个共同的标准,于是当不同语言用
    了不对应的编码就会产生乱码

4.为统一标准,Unicode 编码出现了,所有语言统一到一套编码
        Unicode与ASCII 编码比较
            1)  字母A: ASCII 十进制65,二进制就是 0100 0001
                汉字中 ASCII表示不了 采用Unicode编码为20013 二进制:01001110 00101101
            2)  为计算机识别统一长度,所以A 前面位置补0 即 00000000 0100 0001
        标准就此统一
    5. 标准统一了,乱码问题解决了,但是Unicode编码长度较长,但计算机英文为主,
    若内容若全是英文,Unicode编码就比ASCII编码多一倍存储空间,同时传输也多一倍
    怎么解决呢?
    
    6.要是Unicode 编码可以变化就好了,于是UTF-8 出现了
    utf-8 中,字母一个字节,一个汉字3个字节,特别生僻的4-6个
    于是节约了空间和存储

7,那么问题来了:计算机只认Unicode 编码
    utf-8 之间怎样转换的
    如图:

当需要被计算机识别时,就会加载到内存,此时采用的编码就必须是Unicode 编码
    当需要在网络中传输时,或者存储在文件中时,就采用UTF-8编码,为了节约空间成本
    所以就有了相互转化

python2 和python3 在Windows/Linux 上的编码转换

python2:

  在Windows:

    1. 先来看看window 本身是什么编码
                import sys
                sys.getdefaultencoding()
                #out: "utf-8"
            2.    字符串全部英文
                s1= "abc" -->  type(s1):str
                s2 = u"abc" --> type(s2):Unicode
                    u""的意义:表示将后面的字符串以unicode格式存储
                s1.encode("utf8")  成功
                s2.encode("utf8")  成功

3.  当出现中文时:
                s1 = "你好"    --> GB2312编码。windows下
                s2 = u"你好"
                s1.encode("utf8")  报错
                s2.encode("utf8")  成功
                
                报错原因:
                    在内存中是以Unicode 进行编码的,但是
                s1 在传递过来时就是不是Unicode编码了(原因是存储浪费),而
                encode是将一个Unicode 对象转化为参数中的编码格式进行编码
                所以说 s2不会报错
                
                解决办法:
                    先将这个gb2312的编码转化为unicode编码的对象
                然后再转化为utf-8
                    s1.decode("gb2312").ecode("utf8")  成功  Windows下为"gb2312"
                    decode("xx")方法是将一个编码为"xx"的对象转化
                为Unicode对象

  在Linux下:

    1. 先来看看linux 本身是什么编码
                import sys
                sys.getdefaultencoding()
                #out: "ascii"            
            2.    字符串全部英文
                s1= "abc" -->  type(s1):str
                s2 = u"abc" --> type(s2):Unicode
                    u""的意义:表示将后面的字符串以unicode格式存储
                s1.encode("utf8")  成功
                s2.encode("utf8")  成功
            3.  当出现中文时:
                s1 = "你好"    --> utf-8编码。Linux下 为啥不是ascii? 那ascii能表示中文吗?
            肯定是转化为了utf-8 了啊
                s2 = u"你好"
                s1.encode("utf8")  报错
                s2.encode("utf8")  成功
            解决办法:
                    先将这个utf-8的编码转化为unicode编码的对象
                然后再转化为utf-8
                    s1.decode("utf8").ecode("utf8")  成功  Linux下中文为"utf-8"
                等价于 s1 又转回去了,本身就是utf-8编码

python 3:

  在python3 中,所有的str类型的都是Unicode 格式编码,可以直接encode为"utf-8"
        
        在Windows:
            1.    字符串全部英文
                s1= "abc" -->  type(s1):str
                s2 = u"abc" --> type(s2):Unicode
                    u""的意义:表示将后面的字符串以unicode格式存储
                s1.encode("utf8")  成功
                s2.encode("utf8")  成功
            2.  当出现中文时:
                s1 = "你好"    --> Unicode编码。windows下
                s2 = u"你好"    ---> 没有必要这样写 ,不加u"",3也认为这就是Unicode
                s1.encode("utf8")  成功
                s2.encode("utf8")  成功  
        在Linux下: 跟在window 下一样

总结:

谈谈 #-*-coding:UTF-8 -*-

  python2与3 最大的区别:
                2 中当文件有中文出现时就必须在开头加上,而且汉字字符串必须加u""
            作用:
                  告知python 这个文件是按照utf-8格式编码的python就会按照这个编码进行解读,
                然后在内部进行Unicode转换
            为什么3中不用写:
                  3中Python都会将文件以Unicode进行解读
3

python基础一 ------Python 的编码的更多相关文章

  1. 二十一. Python基础(21)--Python基础(21)

    二十一. Python基础(21)--Python基础(21) 1 ● 类的命名空间 #对于类的静态属性:     #类.属性: 调用的就是类中的属性     #对象.属性: 先从自己的内存空间里找名 ...

  2. python基础知识3---字符编码

    阅读目录 一 了解字符编码的知识储备 二 字符编码介绍 三 字符编码应用之文件编辑器 3.1 文本编辑器之nodpad++ 3.2 文本编辑器之pycharm 3.3 文本编辑器之python解释器 ...

  3. python基础——6(字符编码,文件操作)

    今日内容: 1.字符编码: 人识别的语言与机器识别的语言转化的媒介 *****     2.字符与字节: 字符占多少字节,字符串转化 ***     3.文件操作: 操作硬盘中的一块区域:读写操作  ...

  4. Python基础之字符串和编码

    字符串和编码 字符串也是一种数据类型,但是字符串比较特殊的是还有个编码问题. 因为计算机自能处理数字,如果徐娅处理文本,就必须先把文本转换为数字才能处理,最早的计算机子设计时候采用8个比特(bit)作 ...

  5. Python基础-week01 Python安装/变量/输入/及循环语句使用

      一.Python介绍 (1).目前Python主要应用领域: 云计算: 云计算最火的语言, 典型应用OpenStack WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,You ...

  6. Python基础-1 python由来 Python安装入门 注释 pyc文件 python变量 获取用户输入 流程控制if while

    1.Python由来 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚 ...

  7. Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程

    [保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...

  8. Python基础 初识Python

    机器码 机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据. 通常意义上来理解的话,机器码就是计算机可以直接执行,并且执 ...

  9. python基础实践 -python是一门动态解释性的强类型定义语言

    python是一门动态解释性的强类型定义语言 Python能做什么? Python是一门综合性的语言,你几乎能在计算机上通过Python做任何事情,以下是Python应该最广泛的几个方面: 1.网络应 ...

随机推荐

  1. jenkins持续集成:构建多个job同时执行

    在jenkins 构建任务时,同时只能构建2个,但是有时候可能涉及到需要同时执行多个任务(大于2个),如果不能同时运行的话,就需要等待上一个执行完了,再执行第三个 比如用例非常多,需要把不同的用例分给 ...

  2. Python生成PASCAL VOC格式的xml标注文件

    Python生成PASCAL VOC格式的xml标注文件 PASCAL VOC数据集的标注文件是xml格式的.对于py-faster-rcnn,通常以下示例的字段是合适的: <annotatio ...

  3. Java享元模式

    定义:提供了减少对象数量从而改善应用所需的对象结构的方式 运用共享技术有效支持大量细微度的对象 类型:结构型 应用场景:系统底层的开发啊,以便解决系统的性能问题 系统有大量的相似对象,需要缓存池的场景 ...

  4. 前端面试题集锦及答案解析--HTML、 HTTP、web综合问题

    前端需要注意哪些SEO 合理的title.description.keywords:搜索对着三项的权重逐个减小,title值强调重点即可,重要关键词出现不要超过2次,而且要靠前,不同页面title要有 ...

  5. Node 杂技

    1.关于require 当文件夹a中含有index.js时,在b.js中如果有require("文件夹a的路径"),则将会自动执行index.js的语句

  6. 微信小程序 View:flex 布局

    微信小程序 View 支持两种布局方式:Block 和 Flex 所有 View 默认都是 block 要使用 flex 布局的话需要显式的声明: display:flex; 下面就来介绍下微信小程序 ...

  7. P3403 跳楼机

    题解: 据说是最短路经典题 考虑mod c一意义下 我们会发现mod c相同的话我们一定会用最少步数到达,剩余的都用c转移 由于转移图有环所以我们用spfa来dp(其实也可以理解成最短路) wa了好多 ...

  8. [转]centos安装autossh

    centos安装autossh $ sudo yum install wget gcc make$ wget http://www.harding.motd.ca/autossh/autossh-1. ...

  9. playbook role应用

    参考: ansible中文权威指南 1. 动态Include 结合when等判断,在满足某个条件的时候加载. - include: test.yml when: ...... handler 中也可以 ...

  10. 今天开始学习php,粘一些重点放这以便查看记忆。

    1.PHP的变量用$定义. PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中. index 保存变量的名称.这个数组可以在函数内部访问,也可以直接用来更新全局变量. 2. ...