• 统一采用一种编码形式


    统一采用一种编码形式

      在编写Python程序的时候,一定要把编码和解码的操作放在外界来做。程序的核心部分应该使用Unicode字符类型,而且不要对字符的编码做任何设置。我们希望让用户无论输入的是str还是bytes类型,都保证返回统一的字符编码形式。

      这样做既可以令程序接收多种类型的文本编码,又可以保证输出的文本信息只采用一种编码形式,通过外界保证了编码的统一。

    由于字符串类型有分别,所以Python代码中常常会出现两种常见的使用场景:    

    1.开发者需要原始的8位bit值,这些8位bit值表示的是以UTF-8格式(或其他编码形式)来编码的字符。

    2.开发者需要操作没有特定编码形式的Unicode字符。

      一 在Python3中,我们需要编写接收 str 或 bytes,并总是返回str的方法:

    # 输入str或bytes都统一返回str
    def to_str(str_or_bytes):
        if isinstance(str_or_bytes, bytes):
    
            # 如果是bytes,解码成str
            value = str_or_bytes.decode('utf-8')
    
        else:
            value = str_or_bytes
    
        return value
    
    res = to_str(b'jason like shenghao!')
    print(type(res))
    
    >>> <class 'str'>

      总返回bytes的方法

    # 输入str或bytes都统一返回bytes
    def to_bytes(str_or_bytes):
        if isinstance(str_or_bytes, str):
    
            # 如果是str,编码成bytes
            value = str_or_bytes.encode('utf-8')
    
        else:
            value = str_or_bytes
    
        return value
    
    res = to_bytes('jason 喜欢吃生蚝')
    print(res)
    print(type(res))
    
    >>> b'jason xe5x96x9cxe6xacxa2xe5x90x83xe7x94x9fxe8x9ax9d'
    >>> <class 'bytes'>

    二 在Python2中,我们需要编写接收 str 或 Unicode,并总是返回Unicode的方法:

    '''
    python2中
    '''
    # 输入str或unicode都统一返回unicode
    def to_unicode(str_or_unicode):
        if isinstance(str_or_unicode, str):
    
            # 如果是unicode,编码成str
            value = str_or_unicode.encode('utf-8')
    
        else:
            value = str_or_unicode
    
        return value

     总返回str

    # 输入str或unicode都统一返回str
    def to_str(str_or_unicode):
        if isinstance(str_or_unicode, unicode):
    
            # 如果是bytes,解码成str
            value = str_or_unicode.decode('utf-8')
    
        else:
            value = str_or_unicode
    
        return value

    总结: 对输入的数据进行操作之前,使用外界的辅助函数来保证字符序列的类型与开发者期望的相符合。

  • 相关阅读:
    eclipse中的TODO和FIXME
    使用mui框架后a标签无法跳转
    java.lang.OutOfMemoryError: Java heap space异常
    mysql中表触发器的简单使用
    编写第一个 Java 程序
    QDialog类exec()与show()的区别
    Qt中信号槽connect的多种类型
    2.3 UML活动图
    2.2 UML用例模型
    2.1 uml序言
  • 原文地址:https://www.cnblogs.com/kermitjam/p/11162116.html
Copyright © 2020-2023  润新知