作家
登录

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

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

, line 1, in <module> 
  • UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128) 
  • 精确处所式应当是找到一种包含有中文字符的字符编码,比如 UTF-8或者 GBK 显示地把 y 进行解码转换成 unicode 类型

    1. >>> x = u"Python" 
    2. >>> y = "之禅" 
    3. >>> y = y.decode("utf-8"
    4. >>> x + y 
    5. u'Python\u4e4b\u7985' 

    Python3对字符串和字符编码进行了很彻底的重构,完全不兼容Python2,同时也很多想迁徙到Python3的项目带来了很大年夜的麻烦,Python3 把体系默认编码设置为 UTF-8,字符和二进制字节序列区分得更清楚,分别用 str 和 bytes 表示。文本字符全部用 str 类型表示,str 能表示 Unicode 字符集中所有字符,而二进制字节数据用一种全新的数据类型,用 bytes 来表示,尽管Python2中也有bytes类型,但那只不过是str的一个别号。

    1. >>> a = "a" 
    2. >>> a 
    3. 'a' 
    4. >>> type(a) 
    5. <class 'str'
    6.  
    7. >>> b = "禅" 
    8. >>> b 
    9. '禅' 
    10. >>> type(b) 
    11. <class 'str'

    bytes

    Python3 中,在字符引号前加‘b’,明白表示这是一个 bytes 类型的对象,实际上它就是一组二进制字节序列构成的数据,bytes 类许可所以 ASCII范围内的字符和其它十六进制情势的字符数据,但不克不及用中文等非ASCII字符表示。

    1. >>> c = b'a' 
    2. >>> c 
    3. b'a' 
    4. >>> type(c) 
    5. <class 'bytes'
    6.  
    7. >>> d = b'\xe7\xa6\x85' 
    8. >>> d 
    9. b'\xe7\xa6\x85' 
    10. >>> type(d) 
    11. <class 'bytes'
    12. >>> 
    13.  
    14. >>> e = b'禅' 
    15.   File "<stdin>", line 1 
    16. SyntaxError: bytes can only contain ASCII literal characters. 

    bytes 类型供给的操作和 str 一样,支撑分片、索引、根本数值袈渌算等操作。然则 str 与 bytes 类型的数据不克不及履行 + 操作,尽管在python2中是可行的。

    Python3中的字符串与字节序列

    1. >>> b"a"+b"c" 
    2. b'ac' 
    3. >>> b"a"*2 
    4. b'aa' 
    5. >>> b

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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