zoukankan      html  css  js  c++  java
  • python编码问题总结

    一提到编码,我们脑子里就会想到unicode, utf-8 ,gbk 等类型的编码。

    但事实上,unicode和utf-8,gbk并不是同一级别的代码。

    python3中,unicode是内存里统一使用的编码,内存里所有的数据(比如str对象)都是用unicode编码的。

    可以看到,添加u前缀以后,str对象没变化,说明原本就是unicode

    从unicode编码转换成别的类型的编码,这个过程叫编码 (encode)

    从别的类型的编码转换为unicode,这个过程叫解码 (decode)

    由此你可以想到,str对象没有decode方法,因为unicode不能再解码了。

    同样的,byte对象没有encode方法。

    下图中,‘xe4xbdxa0xe5xa5xbd’是中文‘你好’的utf-8编码。

    但是,如果我们在这段代码前面不加前缀b,python就会把它当字符串看待,也就是unicode

    我们说过,unicode没有decode方法,所以python报错了。

    我们在前面加上前缀b以后,python就会把str转换成byte,这样就可以调用decode属性了。

    python3之编码详解

     

    一,python2与python3的区别

    1)python2可以不用括号()

         python3必须加括号

    2)python2中有range()有序列表,xrange()生成器

         python3中只有range()

    3)python2中输入是raw_input()

         python3中输入是input()

    二,  =    ==    is  三者的区别

    1)  =           是赋值

        ==          是比较,值是否相等

            is          比较的是内存地址

        id(内容)   打印的是内容的id       print(id1(内容),id2(内容))

      is 与 == 区别:

      is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。

    三,小数据池

            小数据池是int和str在一定范围内共用一个数据池,范围-1— -256。小数据池是为了节省内存。

    1)str:不含有特殊字符的共用

                 ps:  s1 = ‘alex’     

                          s2 = 'alex'

                          print(s1 is s2)

                         结果是True

    2)str: ‘一个字符’*小于等于20的数字,还是共用,如果是大于20的就不共用了。

                  多个字符不论乘什么数字,都不共用

    3)剩下的list  dict  taple  set等都没有小数据池概念

    四,编码

     ascii码:         只有英文字母和特殊字符,一个字节是8位

    unicode码:  一个字符是32位,一个字母4个字节

                          一个汉字是32位,一个汉字4个字节

    utf-8:           一个字母是8位,一个字母1个字节

                          一个汉字是24位,一个汉字3个字节

    gbk;             一个字母是8位,一个字母1个字节

                          一个汉字是16位,一个汉字2个字节

    1)各个编码之间的二进制不能互相识别,会乱码。

         uncode占得内存太多,所以不能传输和储存。

         utf-8,gbk,utf-16,utf-32,gb2312,ascii等都可以储存和传输。

    2)python3在内存中是用unicode编码方式存储的,所以不能直接储存和传输,要转化为其他编码进行储存和传输。

    五,bytes类型

         bytes类型也是一种数据类型。

         bytes不是用unicode方式编码的,所以可以储存和传输。

         bytes的编码方式是utf-8,gbk,ascii,gb2312等。

    1)英文

          在python3中:str表现形式; s = ''alex''           str编码形式:unicode

          在bytes中:    str表现形式: s = b''alex''          str编码形式:utf-8,gbk,ascii,gb2312等

          中文

          在python3中:str表现形式; s = ''中国''          str编码形式:unicode

          在bytes中:    str表现形式: s = b''xe91e91e91e91e91e91         str编码形式:utf-8,gbk,ascii,gb2312等

    六,编码  encode

    1)将str>>>bytes    可以指定编码方式       

         s1 = ‘alex’

         s11 = s1.encode('utf-8')

         print(s11)

         表面是将str转化为bytes,实际内部是将unicode转化为utf-8,gbk,ascii,gb2312等

  • 相关阅读:
    docker 基础
    shell
    MySQL之MGR
    MySQL之读写分离
    MySQL主从复制
    MySQL之数据类型
    MySQL之索引与约束条件
    SQL语句进阶
    SQL语句初识
    Linux之MySQL安装
  • 原文地址:https://www.cnblogs.com/shangping/p/11268750.html
Copyright © 2011-2022 走看看