python 编码

作者: hiekay | 来源:发表于2018-10-24 18:57 被阅读4次

    字符编码

    中文:

    >>> name = '你好'
    >>> name
    '\xe4\xbd\xa0\xe5\xa5\xbd'
    
    

    英文:

    >>> name = "hiekay"
    >>> name
    'hiekay'
    
    

    计算机中的字符编码

    一般用utf-8

    UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或发送文字的应用中,优先采用的编码。
    

    encode和decode

    从encode()和decode()两个内置函数:

     codecs.encode(obj[, encoding[, errors]]):Encodes obj using the codec registered for encoding. codecs.decode(obj[, encoding[, errors]]):Decodes obj using the codec registered for encoding.
    

    python2默认的编码是ascii,通过encode可以将对象的编码转换为指定编码格式,而decode是这个过程的逆过程。

    实验:

    >>> a = "中"
    >>> type(a)
    <type 'str'>
    >>> a
    '\xe4\xb8\xad'
    >>> len(a)
    3
    
    >>> b = a.decode('utf-8')
    >>> b
    u'\u4e2d'
    >>> type(b)
    <type 'unicode'>
    >>> len(b)
    1
    
    

    上面实验中,变量a引用了一个字符串,所谓字符串(str),严格地将是字节串,它是经过编码后的字节组成的序列。也就是你在上面的实验中,看到的是“中”这个字在计算机中编码之后的字节表示。用len(a)来度量它的长度,它是由三个字节组成的。

    然后通过decode函数,将字节串转变为字符串,并且这个字符串是按照unicode编码的。在unicode编码中,一个汉字对应一个字符,这时候度量它的长度就是1.

    反过来,一个unicode编码的字符串,也可以转换为字节串。

    >>> c = b.encode('utf-8')
    >>> c
    '\xe4\xb8\xad'
    >>> type(c)
    <type 'str'>
    >>> c == a
    True
    
    

    python中如何避免中文是乱码

    首先,提倡使用utf-8编码方案,因为它跨平台不错。

    • 1 :在开头声明:
    # -*- coding: utf-8 -*-
    
    

    或者

    # coding:utf-8
    
    
    • 2:遇到字符(节)串,立刻转化为unicode,不要用str(),直接使用unicode()
    unicode_str = unicode('中文', encoding='utf-8')
    print unicode_str.encode('utf-8')
    
    
    • 3:如果对文件操作,打开文件的时候,最好用codecs.open,替代open(这个后面会讲到,先放在这里)
    import codecs
    codecs.open('filename', encoding='utf8')
    
    

    用python3就没有编码的问题。

    相关文章

      网友评论

        本文标题:python 编码

        本文链接:https://www.haomeiwen.com/subject/pnixtqtx.html