编码问题汇总

ASCII码           

      A : 00000001   一个字节8位来表示一个字符

Unicode

      A : 00000000  00000000  00000000  00000001   4个字节32位来表示一个字符

      中文一个字例如:

      中:00000000  00000000  00000001   3个字节24位来表示一个字符

utf-8

        A :   00000001   1个字节8位来表示一个字符

       中文一个字,例如:

       中:00000000  00000000  00000001   3个字节24位来表示一个字符

   

gbk 

         A :   00000001   1个字节8位来表示一个字符

        中文一个字,例如:

        中:  00000000  00000001   2个字节16位来表示一个字符

总结:(python2和3通用的)

     1,各个编码之间的二进制,是不能相互识别的,会产生乱码(犹如:红军的密码本和日本鬼子的密码本是不一样的,不能通用)

  2,文件的储存,传输不能是Unicode(只能是utf-8,utf-16,gbk,gb2312,ASCII码等)  <原因是Unicode占用的空间太大>

下面是python3所特有的性质:

python3的字符串str 在内存中是用Unicode编码的。(产生的问题,储存和传输不是一种编码,需要转化)

bytes类型: 

对于英文:

    str  :表现形式: s = 'alex'

         编码方式:00000001    Unicode

    bytes:表现形式:s = b 'alex'

        编码方式:00000001    utf-8,gbk,gb2312等

对于中文:   

          str  :表现形式: s = '中国'

           编码方式:00000001    Unicode

      bytes:表现形式:s = b 'xe91e91e01e21e31e32'                 是16进制

          编码方式:00000001    utf-8,gbk,gb2312等

总结:

  实例展示:    

s = 'alex'
s1 = s.encode('utf-8')
# encode 编码 将Unicode转化为utf-8或者gbk ; 表现形式是:str-->bytes
print(s1)

s ='中国'
s1 = s.encode('utf-8')
print(s1)

 结果截图如下:转化成了16进制(utf-8是3个字节表示一个汉字)

s ='中国'
s2 = s.encode('gbk')
print(s2)

 结果截图如下:转化成了16进制(gbk是2个字节表示一个汉字)

 

原文地址:https://www.cnblogs.com/www-qcdwx-com/p/10169518.html