• python中Unicode编码初探


    上一篇文章主要讨论了字符编码的不同方式,这一篇文章着重谈谈对python的编码解码的理解。

    python2

    在python2中主要有两种类型的字符类型,一个是str,一个是Unicode。平时我们默认操作的字符串类型是str,在字符串前面加一个u就是Unicode类型。

    这两个类型有相应的工厂方法:str()unicode()

    上图的例子中可以看出,unicode方法将传入的string,利用传入的encoding将string转换成unicode对象。注意最后的错误是因为python默认的编码方式是ASCII编码格式。  

    >>>import sys
    >>>sys.getdefaultencoding()
    'ascii'
    

    string类型和unicode类型分别拥有str.decode()unicode.encode()方法。我们实验一下:

    >>>a_unicode=u 'Hi u2119'               #长度为4
    >>>to_string=a_unicode.encode('utf-8')
    >>>to_string
    'Hi xe2x84x99'                    #这里长度为6
    >>>type(to_string)
    'str'
    >>>to_new_unicode=to_string.decode('utf-8')
    >>>to_noe_unicode==a_unicode
    True                                                                                            #这里python2中两者是相等的,但是python3中不相等。
    >>>asc_string=a_unicode.encode()
    UnicodeEncodeError:'ascii' not in range(128)                         #上面讲过python默认编码是ascii,而ascii只能表示128的字符,u2119超出了ascii的可编码范围,所以错误
    >>>asc_unicode=to_string.decode()
    UnicodeEncodeError:'ascii' not in range(128)                           #这里利用ascii解码utf-8编码过的字符,出现同样的错误。
    >>>to_string.encode('utf-8')
    UnicodeEncodeError:'ascii' not in range(128)
    

    上述代码,最后一个错误尤其要注意,尝试将一个字符串类型编码成utf-8编码格式,在python内部要经过两个步骤:将字符串转换成unicode,接着将转换后的unicodeencode成'utf-8'格式即:to_string.decode(sys.getdefaultencoding).encode('utf-8')。因为默认为ascii编码,不能转换xe2,所以出现错误。
    从上述错误我们要注意两点:

    • 在转换的时候,明确转换的字符串的类型,确认是str还是unicode
    • 明白python内部包含的隐式转换方法。

    参考资料:
    http://nedbatchelder.com/text/unipain.html
    https://docs.python.org/2/howto/unicode.html
    http://blog.csdn.net/trochiluses/article/details/16825269

  • 相关阅读:
    py 5.11
    py 5.10
    py 5.9
    py 5.8
    python 5.7
    python 5.4
    python 5.3
    python 5.2
    python 4.28
    python 4.27
  • 原文地址:https://www.cnblogs.com/hyperionworld/p/5346545.html
Copyright © 2020-2023  润新知