字符的编码

Posted bs2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符的编码相关的知识,希望对你有一定的参考价值。

字符的编码

技术图片

前置知识点:
    1、程序执行的三大核心硬件(***):
        cpu
        内存
        硬盘
    正常执行一个程序的要点:
        1、将硬盘中的数据读到内存
        2、由cpu读内存中的数据进行执行
        3、在执行程序的时候,生成的数据,优先存入内存
        
        2、python解释器执行一个py文件过程(***)
        如果没有python解释器,py文件单纯就是一个文本文件
        所以说,想执行py文件,必须先执行python解释器

        1、将python解释器的代码有硬盘读到内存
        2、将py文件以普通文本文件的格式由硬盘读到内存
        3、python解释器去内存中读取py文件的数据
        4、识别python语法,执行相应的操作

        ps:任何一个文本编辑器的执行,前两部都一样

字符编码:
    字符:世界上一切语言、文字
    有必要考虑,图片文件、音频文件、视频文件?


    文件的输入和输出是两个过程

    人类输入的内容都是人类自己可以识别的字符

    计算机只能识别0101010二进制字符

    将人类的字符,存入内存和硬盘,要经历一个过程:

    人类的字符  >>>>>>>     (字符编码表)    >>>> 计算机二进制

    0 a
    1 b
    01 a
    10 b
    00 c
    11 d

    ASCII码表(美国)
        用八位二进制来代表一个英文字符(所有的英文字符+符号一共大概128左右)
            0000 0000
            1111 1111
            最多只能表示255位


        八位二进制 = 8 bit
        8 bit = 1 bytes
        1024bytes = 1KB
        1024KB = 1MB
        1024MB = 1GB
        1024GB = 1TB
        1024TB = 1PB

    GBK(中国)
        用2个bytes来代表一个字符,兼容英文字符
        0000 0000 0000 0000
        1111 1111 1111 1111
        最多可以表示65535位

    shift(小日子过得不错的日本人)

    fuck(韩国的)

    万国码(unicode)

    为了兼容所有的国家的字符,生成unicode
        所有的字符都用2bytes
        0101 0101 a
        0000 0000 0101 0101 a
        
        unicode的缺点:
        1、占用存储空间
        2、io次数增加,程序运行速度变慢(最致命)

    在unicode二进制数据存入硬盘的时候,做优化

    utf-8:
        utf-8只与unicode有对应关系
        unicode transformation format

        所有的英文字符用1个bytes表示
        所有的中文字符用3个bytes表示

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


    需要掌握:
        1、用户无论输入什么字符,存入内存,unicode都可以兼容
        2、硬盘中无论是什么编码的文件,读到内存,都可以兼容unicode
        
    乱码的主要原因:
    乱码和解码不一致

    数据的传输:
        优先以自己的本国字符编码进行传递


    必须掌握(******)
        (内存)unicode二进制字符 >>>  编码(encode)  >>> (硬盘)utf-8二进制字符
        (硬盘)utf-8二进制字符  >>>   解码(decode)  >>> (内存)unicode二进制字符

    (******)
    保证不乱码核心:
        用什么编码存的数据,就用什么编码取

----------------------------------------
    python2 :
        默认的字符编码ascii码(因为当时的unicode还没盛行)
    python3:
        默认的字符编码utf-8

    文件头:
        # coding:utf-8
        用英文字符,是为了让所有的计算机都可以识别


    pycharm默认的字符编码是:
        utf-8
    windows操作系统默认字符编码:
        gbk
        
 最重要的2点的就是 :
保证不乱码的核心是:用什么编码存的数据,就用什么编码取!
(内存)Unicode二进制字符>>>>编码(encode)>>>>(硬盘)utf-8 二进制;
(硬盘)uft-8二进制>>>>解码(decode)>>>>>内存(Unicode )二进制字符

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

以上是关于字符的编码的主要内容,如果未能解决你的问题,请参考以下文章

从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration

InputStream的三个read的区别

《安富莱嵌入式周报》第279期:强劲的代码片段搜索工具,卡内基梅隆大学安全可靠C编码标准,Nordic发布双频WiFi6 nRF7002芯片

使用非utf-8编码在Python中解析XML

带有神秘附加字符的 Javascript Date getTime() 代码片段

以下代码片段 C++ 的说明