关于ASCII、unicode、UTF-8编码的一些见解

编码详解

    常见的编码:

    UTF-8

    GBK(ANTI、cp936)

    ASCII

    GB2312

    ISO-8859-1

 

编码集是什么?

    用于图形界面显示对应的编码集,其实就是图形

    字节对应的图案是什么

 

    1)ASCII:  最早起实现图形界面时, 计算机中的 字节对应的 字符集(128个字符)

        只使用了 0x00 -- 0x7F

       (128个字符:2**7=128  )

        1个字节

    2)ISO-8859-1: 西欧字符集

        还有一些ISO-8859-2、ISO-8859-3、ISO-8859-4...ISO-8859-16

        计算机发展到欧洲后,发现ASCII码没有包含他们特有的字符,

        兼容ASCII码

        进行扩展, 0x80 -  0xFF

        1个字节

   3) GB2312: 中文简体编码集

        计算机发展到中国后,创造的字符集

        2个字节,兼容 ASCII   

        所有的2个字节的内容(中文、全角符号等),高位字节和地位字节都必须大于 0x7F

    GBK:  中文编码集,包括繁体

        2个字节,兼容 GB2312

        只需要高位字节大于0x7F,低位字节不限制 

    GB18030:

        1字节、2字节和4字节三种方式对字符编码

        兼容GBK

    BIG5: 台湾的繁体中文字符集

        2个字节

 

    4)unicode:  每种语言中的每个字符设定了统一并且唯一的二进制编码

      (定长存储) 通常 2-4个字节 表示一个字符

       unicode将所有语言都统一到一套编码集,通常使用2个字节16位,有的是4个字节。

       包括ASCII码也需要2个字节表示,浪费空间

        17个平面

        其中有一个BMP基础平面,是 2个字节 , 一般的中文也是2个字节

        其他16个平面都是 4 字节

        不兼容ASCII

        类似 你好啊 = \u4f60\u597d\u554a

 

    5)UTF-8: UTF-8 、 UTF-16、UTF-32

      (变长存储)英文字符使用1个字节,沿用原来的ascii码

       中文存储一般使用3个字节

        可变字节: 1个字节、2个字节、3个字节、4个字节, 中文是3个字节

        兼容ASCII

        1、小于 0x80 ,对应ASCII

        2、多字节

            读一个字节,大于0x7F之后,展开为 2进制

            字节的高位有几个连续的1,那么就代表需要取几个字节

            110* ****   代表是2个字节表示一个字符

            1110 ****   代表是3个字节表示一个字符

            1111 0***   代表是4个字节表示一个字符

            后续根着的字节,前面2位必须是 10 ,这 2位无实际意义,只是占位符

import sys
print (sys.getdefaultencoding())
#获得系统的默认编码  使用的是python3.6版本  运行结果为:utf-8

            汉字 : 中

            对应utf-8的字节: b'\xe4\xb8\xad'

s="中"
print(s.encode("utf-8"))
#运行结果:b'\xe4\xb8\xad'

            展开:  e4  b8  ad

              e       4         b         8         a         d

            1110   0100   1011   1000   1010   1101

            去掉第一个字节的表示位数的 1110  和后续的字节的高2位 10

            0100  11  1000   10  1101

            每8位进行拼接:

            0100  1110   0010  1101

            4          e       2        d

            对应的 unicode编码就是: \u4e2d

s="中"
print(s.encode('unicode-escape'))
#运行结果:b'\\u4e2d'

 

你可能感兴趣的:(关于ASCII、unicode、UTF-8编码的一些见解)