• 六、编码


    编码:
    ascii:
    早期计算机都是用ascii编码,包含了所有的英文和特殊字符 以8位来存储一个字母(一个字节) 8位=1字节(8位是计算机二进制
    只能以,01010100,八个数字进行存储)
    如:H......01011011...一个字节,有2**8=256种可能性
    unicode万国码,优点:能识别目前所有语言,解决早期ascii只能识别英文问题,总共32位,有2**32可能性,缺点:,占用空间,
    耗用内存大

    utf-8在万国码基础之上进行压缩,用8来占位,节省内存空间(中文是3字节)
    如:H..... -- - - -- - - -- - - -01011011,前面空白区域就可以节省

    gbk:能识别中文和英文(中文是二字节)

    """
    8bit = 1Bytes
    1024Bytes = 1KB
    1024KB = 1MB
    1024MB = 1GB
    1024GB = 1TB
    1024TB = 1PB
    字符编码
    字符编码的发展史
    字符编码表
    ASCII码 只有英文字母和符号与数字的对应关系
    用8位二进制(1bytes)表示一个英文字符

    GBK:中文 英文 符号与数字对应关系
    用2bytes表示一个中文符号 兼容英文字符

    shift

    euck
    乱码: 编码与解码不一致
    内存中unicode >>>编码(encode) 硬盘中utf-8编码
    硬盘中utf-8编码 >>>解码(decode) 内存中的unicode


    现在的计算机内存中统一用的都是unicode
    unicode两大特点:
    1.用户无论输入哪个国家的字符都能够正常显示(兼容万国)
    2.与任意国家的编码都有对应关系

    文件头
    # coding:gbk
    指定python解释器读取该文件使用gbk编码,而不再用默认的

    python2在读取文件默认使用的是ASCII码
    python3在读取文件默认使用的是utf-8码
     
    1.运行程序的三个核心硬件
    cpu
    内存
    硬盘

    任何一个程序要想运算,必选先有硬盘加载到内存,然后cpu去内存取指执行
    运行着的应用程序产生的数据 必先存在内存

    2.python解释器运行一个py文件(xxx.py)步骤
    1.将python解释器的代码由硬盘读到内存
    2.将xxx.py以普通文本文件形式读到内存
    3.python读取文件内容 识别python语法 执行相应操作
    ps:普通的文本编辑器与python解释器前两步都是一样的

    """
    # 字符编码

    """
    字符编码针对的是文字
    那也就意味着这里需要考虑 视频文件 音频文件等其他文件吗? 不需要
    字符编码只跟文本文件有关


    文本编辑器的输入和输出是两个过程

    人在操作计算机的时候输入的是人能够看懂的字符
    但是计算机只能识别010101这样的二进制数据,那么
    输入的字符 >>>(字符编码表)>>> 二进制数字


    字符编码表就是字符与数字的对应关系
    a 0
    b 1
    a 00
    b 01
    c 11
    d 10

    ASCII码表
    用八位二进制表示一个英文字符 所有的英文字符+符号最多也就在125位左右
    0000 0000
    1111 1111


    GBK
    用2Bytes表示一个中文字符 还是用1Bytes表示一个英文字符
    0000 0000 0000 0000
    1111 1111 1111 1111 最多能表示65535个字符

    基于上面的推导步骤 任何一个国家要想让计算机支持本国语言都必须自己创建一个字符与数字的对应关系
    日本人 shift
    韩国人 fuck



    万国码unicode
    统一用2Bytes表示所有的字符
    a 0000 0000 0010 1010

    1.浪费存储空间
    2.io次数增减,程序运行效率降低(致命)


    当内存中的unicode编码格式数据存到硬盘的时候,会按照utf-8编码
    unicode transformation format

    会将unicode的英文字符由原来的2Bytes变成1Bytes
    会将unicode中文字符由原来的2Bytes变成3Bytes




    现在的计算机
    内存都是unicode
    硬盘都是utf-8



    (需要掌握的)
    unicode的两个特点
    1.用户在输入的时候,无论输什么字符都能够兼容万国字符
    2.其他国家编码的数据由硬盘读到内存的时候unicode与其他各个国家的编码都有对应关系

    (*****)
    数据由内存保存到硬盘
    1.内存中的unicode格式二进制数字 >>>>编码(encode)>>>>> utf-8格式的二进制数据

    硬盘中的数据由硬盘读到内存
    1.硬盘中的utf-8格式的二进制数据 >>>>>解码(decode)>>>>> 内存中unicode格式的二进制数据






    (******)
    保证不乱码在于
    文本文件以什么编码编的就以什么编码解





    python2
    将py文件按照文本文件读入解释器中默认使用ASCII码(因为在开发python2解释器的unicode还没有盛行)
    python3
    将py文件按照文本文件读入解释器中默认使用utf-8

    文件头
    # coding:utf-8
    1.因为所有的编码都支持英文字符,所以文件头才能够正常生效

    基于Python解释器开发的软件,只要是中文,前面都需要加一个u
    为了的就是讲python2(当你不指定文件头的时候,默认用ASCII存储数据,如果指定文件头那么就按照文件头的编码格式存储数据)





    python3中字符串默认就是unicode编码格式的二进制数





    补充:
    1.pycharm终端用的是utf-8格式
    2.windows终端采用的是gbk

    乱码:字符不能够正常显示      编码不一致

    八位二进制也叫8bit(******)
    8bit = 1Bytes
    1024Bytes = 1KB
    1024KB = 1MB
    1024MB = 1GB
    1024GB = 1TB
    1024TB = 1PB
    ....


    x="我”
    rew = x.encode("utf-8")  #    在内存unicode中,转为编码encode ,变成原生二进制用于存储数据
    print(type(rew))
    print(rew.decode("utf-8")) #从硬盘把原生二进制数据,通过解码decode ,转为unicode,用于取数据























































  • 相关阅读:
    最大子数组和问题的解
    【剑指Offer】46孩子们的游戏(圆圈中最后剩下的数)
    【剑指Offer】45扑克牌顺子
    【剑指Offer】44翻转单词顺序列
    【剑指Offer】43左旋转字符串
    【剑指Offer】42和为S的两个数字
    【剑指Offer】41和为S的连续正数序列
    【剑指Offer】40数组中只出现一次的数字
    【剑指Offer】39平衡二叉树
    【剑指Offer】38二叉树的深度
  • 原文地址:https://www.cnblogs.com/wukai66/p/11140118.html
Copyright © 2020-2023  润新知