作家
登录

一筹莫展?来看看字符编码的前世今生吧

作者: 来源: 2017-11-02 15:16:43 阅读 我要评论

"禅" 
  • >>> u 
  • u'\u7985' 
  • >>> u.encode("utf-8"
  • '\xe7\xa6\x85' 
  •  
  • >>> s = "禅" 
  • >>> s.decode("utf-8"
  • u'\u7985' 
  • >>> 
  • 不少初学者怎么也记不住 str 与 unicode 之间的转换用 encode 照样 decode,如不雅你记住了 str 本质上其实是一串二进制数据,而 unicode 是字符(符号),编码(encode)就是把字符(符号)转换为 二进制数据的过程,是以 unicode 到 str 的转换要用 encode 办法,反过来就是用 decode 办法。

    引用

    encoding always takes a Unicode string and returns a bytes sequence, and decoding always takes a bytes sequence and returns a Unicode string".

    清跋扈了 str 与 unicode 之间的转换关系之后,我们来看看什么时刻会出现 UnicodeEncodeError、UnicodeDecodeError 缺点。

    UnicodeEncodeError

    UnicodeEncodeError 产生在 unicode 字符串转换成 str 字节序列的时刻,来看一个例子,把一串 unicode 字符串保存到文件

    Python2 中的字符编码

    1. # -*- coding:utf-8 -*- 
    2. def main(): 
    3.     name = u'Python之禅' 
    4.     f = open("output.txt""w"
    5.     f.write(name

    缺点日记

    因为调用 write 办法时,法度榜样会把字符经由编码转换成二进制字节序列,内部会有 unicode 到 str 的编码转换过程,法度榜样会先断定字符串是什么类型,如不雅是 str,就直接写入文件,不须要编码,因为 str 类型的字符串本身就是一串二进制的字节序列了。如不雅字符串是 unicode 类型,那么它会先调用 encode 办法把 unicode 字符串转换成二进制情势的 str 类型,才保存到文件,而 Python2中,encode 办法默认应用 ascii 进行 encde.

    相当于:

    1. >>> u"Python之禅".encode("ascii"

    然则,我们知道 ASCII 字符集中只包含了128个拉丁字母,不包含中文字符,是以 出现了 'ascii' codec can't encode characters 的缺点。要精确地应用 encode ,就必须指定一个包含了中文字符的字符集,比如:UTF-8、GBK。

    1. >>> u"Python之禅".encode("utf-8"
    2. 'Python\xe4\xb9\x8b\xe7\xa6\x85' 
    3.  
    4. >>> u"Python之禅".encode("gbk"
    5. 'Python\xd6\xae\xec\xf8' 

    所以要把 unicode 字符串精确地写入文件,就应当预先把字符串进行 UTF-8 或 GBK 编码转换。

    1. def main(): 
    2.     name = u'Python之禅' 
    3.     name = name.encode('utf-8'
    4.     with open("output.txt""w"as f: 
    5.         f.write(

        推荐阅读

        总是记不住密码怎么办?可以把它存在衬衫上

      捷报道,美国华盛顿大年夜学的研究人员正在研究所谓的“智能织物”,他们的重点放在磁化纺织品上。这种纺织品可以存储能被磁力仪攫取的少量数据,包含存储在大年夜多半智妙手机内部的数据。这>>>详细阅读


      本文标题:一筹莫展?来看看字符编码的前世今生吧

      地址:http://www.17bianji.com/lsqh/38408.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)