python的 随手记----字符编码与转码

一.前提

    那么到底什么是编码呢?

    //ASCII

    记住一句话:计算机中的所有数据,不论是文字、图片、视频、还是音频文件,本质上最终都是按照类似 01010101 的二进制存储的。
    再说简单点,计算机只懂二进制数字!
    所以,目的明确了:如何将我们能识别的符号唯一的与一组二进制数字对应上?于是美利坚的同志想到通过一个电平的高低状态来代指0或1,
    八个电平做为一组就可以表示出
    256种不同状态,每种状态就唯一对应一个字符,比如A--->00010001,而英文只有26个字符,算上一些特殊字符和数字,128个状态也够
    用了;每个电平称为一个比特为,约定8个比特位构成一个字节,这样计算机就可以用127个不同字节来存储英语的文字了。这就是ASCII编码。

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

    //GB2312

    计算机漂洋过海来到中国后,问题来了,计算机不认识中文,当然也没法显示中文;而且一个字节所有状态都被占满了,万恶的帝国主义亡
    我之心不死啊!我党也是棒,自力更生,自己重写一张表,直接生猛地将扩展的第八位对应拉丁文全部删掉,规定一个小于127的字符的意
    义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到0xF7,后面一个字节
   (低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了;这种汉字方案叫做 “GB2312”。GB2312 是对 ASCII 的中文扩展。

    //GBK 和 GB18030编码

    但是汉字太多了,GB2312也不够用,于是规定:只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的
    内容。结果扩展之后的编码方案被称为 GBK 标准,GBK 包括了 GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。

    //UNICODE编码:

    很多其它国家都搞出自己的编码标准,彼此间却相互不支持。这就带来了很多问题。于是,国际标谁化组织为了统一编码:提出了标准编码准
    则:UNICODE 。
    UNICODE是用两个字节来表示为一个字符,它总共可以组合出65535不同的字符,这足以覆盖世界上所有符号(包括甲骨文)

    //utf8:

    unicode都一统天下了,为什么还要有一个utf8的编码呢?
    大家想,对于英文世界的人们来讲,一个字节完全够了,比如要存储A,本来00010001就可以了,现在吃上了unicode的大锅饭,
    得用两个字节:00000000 00010001才行,浪费太严重!
    基于此,美利坚的科学家们提出了天才的想法:utf8.
    UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,它可以使用1~4个字节表示一个符号,根据
    不同的符号而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,所以是兼容ASCII编码的。

    这样显著的好处是,虽然在我们内存中的数据都是unicode,但当数据要保存到磁盘或者用于网络传输时,直接使用unicode就远不如utf8省空间啦!
    这也是为什么utf8是我们的推荐编码方式。

    Unicode与utf8的关系:
    一言以蔽之:Unicode是内存编码表示方案(是规范),而UTF是如何保存和传输Unicode的方案(是实现)这也是UTF与Unicode的区别。

  我们只需要知道unicode是万国码,而utf-8还有gbk都是由unicode中拓展出来的,于是我们utf-8转为gbk是形式是:先转成unicode再转成gbk;同理其他编码转化成utf-8,也先向unicode转化,再转成utf-8

python3字符串是以Unicode编码的,文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示

其中的容易误解的地方:

(1)py3里默认文件编码就是utf-8,所以可以直接写中文,也不需要文件头声明编码了(2)你声明的变量默认是unicode编码,即使你文件头声明编码是utf-8,也不是utf-8, 因为默认即是unicode了

import sysprint(sys.getdefaultencoding())#打印系统的默认编码

#s=u"你好"#加一个u表示这个你好是upython默认是unicodenicode的编码格式,输出结果发现和不加u是一样的,表示python默认是unicodes="你好"#,即这个s是unicode的编码格式print(s.encode("utf-8"))#encode解码,即告诉系统s向utf-8转换,输出一个byte类型的对象print(s.encode("utf-8").decode("gbk"))#表示再向gbk格式转码print(s.encode("gbk"))print(s.encode("utf-8").decode("utf-8").encode("gbk"))print(s.encode())#默认不写表示utf-8print(s.encode("utf-8").decode())
输出结果: 

>>>utf-8 >>>b‘\xe4\xbd\xa0\xe5\xa5\xbd‘#b‘表示byte类型 >>>浣犲ソ >>>b‘\xc4\xe3\xba\xc3‘ >>>b‘\xc4\xe3\xba\xc3‘ >>>b‘\xe4\xbd\xa0\xe5\xa5\xbd‘ >>>你好

时间: 08-21

python的 随手记----字符编码与转码的相关文章

Python——day3_基础1_集合,文件操作,字符编码与转码

集合 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时

python字符编码与转码

python 2.x 字符编码与转码 打印系统默认编码格式 import sys print(sys.getdefaultencoding()) UTF-8 转 gbk 方式:utf-8--转成--unicode--转成--gbk a = "你好" print a utf8_to_unicode = a.decode("utf-8")                 #utf-8转unicode print utf8_to_unicode unicode_to_gb

Python基础3 文件操作、字符编码与转码

文件操作 对文件操作过程 打开文件,得到文件句柄赋值给变量 操作 关闭文件 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:   不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rU r+U "b

python学习笔记(集合的使用、文件操作、字符编码与转码、函数)

集合 集合(set):把不同的元素组成一起形成集合,是python基本的数据类型. 集合元素(set elements):组成集合的成员 为什么需要集合? 集合的作用 1 .列表去重复数据 按照现有知识的解决思路:先设置空列表,然后使用for寻获,把需要去重的列表的第一个数据放到新列表中,然后依次取出第二个数据,把第二个数据和第一个数据作比较,如果不一样,则存入新列表中:以此类推,每取一次都要和新列表中的数据作对比,不一样的则添加入新列表中. 2. 关系测试 比如有学员同时报了python班和l

Python 三级菜单-字符编码和转码-集合的操作-文件的操作

三级菜单: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{}, }, '上地':{ '百度':{}, }, }, '昌平':{ '沙河':{ '老男孩':{}, '北航':{}, }, '天通苑':{}, '回龙观':{}, }, '朝阳':{}, '东城':{}, }, '上海':{ '闵行':{ "人民广场":{ '炸鸡店

python第三天:字符编码、文件操作、函数

作业问题回顾 表格化输出 主要考察字符串的expandtabs的方法,使用空格替换TAB. 百鸡百钱 百鸡百钱的主要是用进行多次判断,然后输出打印. 上课内容 字符编码 概念 编码是计算机用来将人类可读的字符存储成二进制信息而使用的一种格式.字符编码主要针对字符的编码. python中相关的方法 decode:解码,将其他格式的数据转化为unicode格式的数据.转化以后就是Bytes类型的数据.Bytes的数据汉字会转化成字节码,而ascii码会转化成b'meg'的形式.可以接参数,接的参数就

Python基础编程之字符编码、数据类型、列表

目录: python简介 字符编码介绍 数据类型 一.Python简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承.之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者. python的发展历史 1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器. 1991年,第一个Pyt

python开发基础:字符编码&文件操作

一,字符编码 1 以什么编码存的就要以什么编码取出 ps:内存固定使用unicode编码, 我们可以控制的编码是往硬盘存放或者基于网络传输选择编码 2 数据是最先产生于内存中,是unicode格式,要想传输需要转成bytes格式#unicode----->encode(utf-8)------>bytes拿到bytes,就可以往文件内存放或者基于网络传输#bytes------>decode(gbk)------->unicode 3 python3中字符串被识别成unicode

Python不归路_字符编码操作

文件操作补充 上篇随笔中写了文件操作的几个方法,其中truncate()方法遗漏,truncate()方法作用是截取内容,f.truncate()不带参数会清空文件内容,带参数表示截取从零到参数的位置 字符编码 在<Python不归路_零基础学习二>中我们已经学习了一些编码的知识,比如ASCII一共有255个符号,Unicode中,中文字符占两个字节,英文占一个字节,utf-8是unicode的优化方案,中文字节占三个字符.不同字符编码之间需要相互转化才能正常读取.encode和decode,