zoukankan      html  css  js  c++  java
  • 浅谈Python中的编码规则

    注:本人用Python3.4作为学习版本,以下学习心得只适用于Python3.4。

    之前拜读了金角大王Alex关于编码的解答,收获颇多。特此致谢,以下仅谈一谈作为一个初学者,对编码的理解。

    我所了解的编码,大致分为两类:第一类是支持中文的编码集;第二类是支持英文的编码集。至于别国的编码集,暂且不做讨论。

    常见编码:ASCII;Unicode;UTF-8;big5,;GB2312;GBK;GB18030

      接下来,我对以上编码进行分类:

      只支持英文和特殊字符的编码:ASCII

        ASCII是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,用8位来表示1个字节,也就是表示一个英文需要8位二进制数。

      只支持中文和特殊字符的编码:big5,;GB2312;GBK;GB18030

        big5是用来存储繁体中文的编码集,而GB2312;GBK;GB18030都是用来存储简体中文的编码集

        GB2312;GBK;GB18030所支持的汉字数量依次递增,都采用2个字节来表示一个汉字或者特殊符号,也就是用这三个编码集表示中文字符,需要16位二进制数。

        其中需要说明的是,目前中文版windows编码集采用GBK 

      支持中文,英文和特殊字符的编码:Unicode;UTF-8

        Unicode既可以编码中文,也可以编码英文。采用2个字节来表示,也就是说表示一个字符需要16位二进制数。

        UTF-8可以简单理解为Unicode的升级版。当表示英文时,用1个字节来表示,表示一个字符需要8位二进制数;当表示中文时,用3个字节来表示,表示一个字符需要24位二进制数。

    简单了解常用编码集后,我们在Python3.4中可以实现各编码集之间的转换,其中需要说明的是Python3.4默认使用UTF-8编码集(为什么看网上资料说是Unicode???)

    以下是验证程序:  

    # Author: Lucas
    import sys
    print(sys.getdefaultencoding())

    程序运行结果:

    utf-8
    
    Process finished with exit code 0

    当在Python中进行编码转换时,当字符编码不是Unicode时,我们都需要将字符先通过decode解码为Unicode,然后再进行encode编码,得到所期望的编码。

    需要注意的是,decode时,我们需要告诉计算机,我们要把何种编码转换为Unicode。例如,你想要将UTF-8的编码转换为Unicode,写法如下:

    decode(“UTF-8”)

    接下来我们进行编码转化验证:

    # Author: Lucas
    #将test转换为gbk编码
    import sys
    print(sys.getdefaultencoding())
    s=""
    s_to_unicode=s.decode("utf-8")

    这就尴尬了,程序报错:

        s_to_unicode=s.decode("utf-8")
    AttributeError: 'str' object has no attribute 'decode'
    utf-8

    由此猜想,网上说的Python默认编码应该指的是当Python解释器来运行程序时,采用Unicode编码运行,而程序保存格式应该为UTF-8。

    接下来按照假设将test编码转为gbk:

    # Author: Lucas
    #将test转换为gbk编码
    import sys
    print(sys.getdefaultencoding())
    test=""
    test_to_gbk=test.encode("gbk")
    print(test_to_gbk)

    运行结果如下:

    utf-8
    b'xc4xe3'
    
    Process finished with exit code 0

    可以看出,Python3在运行程序时,默认编码格式确实是Unicode,我们成功将test转换成gbk编码,可以看出test在gbk编码中占用2个字节,16位二进制数,分别是c4,e3

    接下来我们将test转成utf-8,这就需要经历解码和编码的过程。程序如下:

    # Author: Lucas
    #将test转换为gbk编码
    import sys
    print(sys.getdefaultencoding())
    test=""
    test_to_gbk=test.encode("gbk")
    print(test_to_gbk)
    test_to_gbk_utf8 =test_to_gbk.decode("gbk").encode("utf-8")
    print(test_to_gbk_utf8)

    程序运行如下:

    utf-8
    b'xc4xe3'
    b'xe4xbdxa0'
    
    Process finished with exit code 0

    可以看出成功将test转成了utf-8编码,其中test占用3个字节,24位二进制数,分别为e4,bd,a0。

    至此,我们基本熟悉了Python环境下的编码转化规则,其余编码操作流程都是一样的。

    总结:

      当进行编码转换时,我们需要知道当前版本python解释器在运行程序时默认的编码格式。在此基础上,当我们进行编码转换时,牢记:Unicode编码是中间编码,其他编码之间相互转换时,需要先将其解码(decode)为Unicode,然后再编码(encode)成对应编码。Unicode时刻放在心中,我们在编码转换时就会游刃有余。

      

      

  • 相关阅读:
    Download: Microsoft Access Database Engine 2010 Redistributable
    18大顺丰不发航空件
    北京南站不是24*7的
    360压缩虽然有占霸道,但是for free,我已经不想去找破解软件了
    VS2010、SQL Server 2008和SQL Server 2012安装详解
    【新提醒】LENOVO_WIN7_SP1_UM_64_CN_RDVD远景Windows7,Windows8,旗舰版,系统下载,主题
    原来qq下载也有类似迅雷的功能了
    如意通5元卡办理了,可以用wifi热点了
    SQLEXPR.EXE 和 SQLEXPR32.EXE的区别 挨踢人 博客园
    HTTP Proxy Support
  • 原文地址:https://www.cnblogs.com/lucas0625/p/7569822.html
Copyright © 2011-2022 走看看