• python字符编码


    1 字符编码原理 

     计算机只能表示数字,不能表示文本,所以要表示文本,就要把文本转化为数字。最早的计算机用8个位(bit)来表示一个字节(bytes),一个字节最多就能表示的最大整数就是255。两个字节能表示就是65535.

      在原本的英文编码设计中,一共127个字符编码,一个字母表示一个数字,比如A的数字就是65。这就是ASCII编码。因为在设计时,只设计了127个字符编码,包含大小写字母和一些特殊字符,所以一个字节就能表示所有的编码。

      但到了中文这里,文本的数量显然不是255个够用的。所以需要用两个字节来存储一个中文字符。这就是GB2312字符编码,包括中文字符编码,同时ASCII中的编码对应表依然存在。后又出现gbk中文编码。

      由于语言众多,在不同的编码中,虽然都兼容ASCII编码,但其他的,一样的数字可能对应不同的文本字符。所以计算机在做数字-文本转换时,如果编码不对,就找不到正确的文本,就会出现乱码。

      unicode(万国码)就是各国语言文本编码的大集合,将所有语言都编码进去。在常用的标准中,也是用连个字节表示一个文本字符。

      unicode在表示英文ascii编码时,就在原有的一个字节前面补一个0000 0000 字节。这样就浪费了一倍的存储空间。uft-8就是将unicode转化成可变长编码,把英文字符编码成一个字节,中文3个字节。

      现在计算机中字符编码的工作方式是:在内存中使用unicode,在传输和存储时,转化为utf-8节省带宽和容量。

    2 python3中的字符编码

      python3中最重要的新特性就是对字符数据和二进制数据作了明确的区分。文本总是str数据类型,在内存中用unicode表示。二进制则直接用bytes数据类型,一个字符用一个字节存储。

      字符串(unicode)可以编码(encode)成字节包(bytes),字节包也可以解码(decode)成字符串。

      decode:有些场景下,应用无法处理二进制数据,必须先解码成字符串。

      encode:在python2中socket网络传输可以以字符串传输。python3中必须以二进制传输。如果我要请求一个网址,必须把这个网址以二进制传过去。

    >>> '信息'.encode('utf-8')
    b'xe4xbfxa1xe6x81xaf'
    >>> '信息'.encode()
    b'xe4xbfxa1xe6x81xaf'
    >>> b'xe4xbfxa1xe6x81xaf'.decode()
    '信息'
    >>> b'xe4xbfxa1xe6x81xaf'.decode('utf-8')
    '信息'
    #str编码成bytes,然后告诉encode函数str的编码格式为utf-8.(缺省值为utf-8)
    #bytes解码成str,告诉decode解码格式为utf-8(缺省值为utf-8)
    

      字符串写入数据库出现乱码时,可以尝试先encode成bytes,然后再解码成unicode或者utf-8。不行就换个编码试试。

    #--------------中文字符编码函数------------
    def ecoding(chars):
        return chars.encode('gbk').decode('unicode_escape')
    

      

  • 相关阅读:
    Linux自定义服务文件编写
    Ubuntu PPA方式安装vim
    ubuntu PPA使用指南
    ubuntu安装最新emacs
    Docker支持中文
    C#调用Go版DLL
    C#调用exe程序
    golang编写动态库供c#程序调用
    科学正在追赶中医,中医将变得时髦(转载)
    常见.NET功能代码汇总 (3)
  • 原文地址:https://www.cnblogs.com/jabbok/p/8984631.html
Copyright © 2020-2023  润新知