• python----编码详解


    python2字符串编码存在的问题:

    • 使用 ASCII 码作为默认编码方式,对中文处理不友好
    • 把字符串分为 unicode 和 str 两种类型,将unicode作为唯一内码,误导开发者

    python3中默认编码方式修改为utf-8。
    在存储和显示上,python3使用文本字符和二进制数据进行区分,更加明确和清晰。

    文本字符使用str类型表示,str 能表示 Unicode 字符集中所有字符,而二进制数据使用bytes类型表示。

    str与bytes之间的转换

    一种方式

         # bytes object
          b = b"example"
         
          # str object
          s = "example"
         
          # str to bytes
          bytes(s, encoding = "utf8")
         
          # bytes to str
          str(b, encoding = "utf-8")
        

    另一种方式,默认使用utf-8.

         # bytes object
          b = b"example"
         
          # str object
          s = "example"
          
          # an alternative method
          # str to bytes
          str.encode(s)
         
          # bytes to str
          bytes.decode(b)





    Python3中的编码

     

      1.编码:

      1.1 ASCII

        一个字符占8位,

      1.2 UTF-8

        一个字符占8位

        一个中文占24位

      1.3 GBK

        一个字符占8位

        一个中文占16位

      1.4 Unicode

        1.4 只说Unicode的32位

          一个字符占32位

          一个中文字同样占32位

    问题 : Unicode中的编码方式能否utf-8中的编码。 GBK的编码方式能否识别utf-8中的编码。 

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

      (2)传输或存储用的不是GBK就是UTF-8,或者其他的占用字节少的,unicode是不能用的,因为unicode占用32位,传输速率与流量消耗是极大的。GBK和UTF-8的转换需要借助于Unicode。

      2. python3的字符串在内存中是unicode 32位编码方式。这样会产生的问题,一个文件传输过去后,对方不能直接用,因为是乱码的,所以必须要用UTF-8或GBK的方式进行转换存储传输,使用encode将str转换为bytes类型(将unicode转换为utf-8或gbk等),bytes类型可以是以utf-8或gbk或其他的编码进行编码存储的str。

      2.1 bytes类型,一种数据类型。bytes类型的操作与字符串类似,与str的区别是编码方式不一样,str的编码是unicode,bytes的编码是gbk或utf-8的。所以想要存储或者传输一个字符串、文章等,必须将编码转换为gbk或utf-8或ascii或gbkgbk2312等(bytes是这样的编码方式),所以str想要传输和存储不能直接进行,需要转换成bytes类型在进行存储和传输。

        对于英文:

        str: 表现形式 s = 'alex',编码方式用的是unicode

        bytes:s = b'alex',编码方式用的是utf-8、gbk等,但不是unicode

        对于中文:

        str:表现形式 s = '中国',编码方式是unicode

        bytes:表现形式 s = b'xe4xb8xadxe5x9bxbd',编码方式是utf-8、gbk。2个字节就是gbk,3个字节就是utf-8.

      2.2 将unicode如何转换成utf-8或gbk等,也就是str与bytes之间的转换

     1 # encode 编码,将str转换为bytes,转换为bytes类型后,可以进行存储和传输
     2 s1 = 'alex'
     3 
     4 # 将s1这个在内存以unicode编码方式存储的字符串转换为bytes类型,使用utf-8编码方式存储的字符串s11
     5 s11 = s1.encode('utf-8')
     6 
     7 print(s11)  # b'alex'
     8 
     9 s2 = '中国'
    10 
    11 s22 = s2.encode('utf-8')
    12 print(s22)      # b'xe4xb8xadxe5x9bxbd'
    13 
    14 # 将s1这个在内存以unicode编码方式存储的字符串转换为bytes类型,使用gbk编码方式存储的字符串s22
    15 s22 = s2.encode('gbk')
    16 print(s22)      # b'xd6xd0xb9xfa'
    View Code










  • 相关阅读:
    MongoDB的特殊操作
    MongoDB的$作为下标的用法
    MongoDB之$关键字,以及$修饰器$set,$inc,$push,$pull,$pop
    MongoDB的数据类型
    MongoDB的增删改查
    Drozer快速使用指南
    [安全分析报告]使用某科技公司客服系统的风险分析
    某客服系统上传漏洞导致服务器被拿下(续)
    YS端对端之间SSL通信安全问题
    某客服系统上传漏洞导致服务器被拿下
  • 原文地址:https://www.cnblogs.com/shangping/p/11268572.html
Copyright © 2020-2023  润新知