zoukankan      html  css  js  c++  java
  • python中字符编码及unicode和utf-8区别

    ascii和unicode是字符集,utf-8是编码集

    • 字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)
    • 编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)

    ascii每个字符占用一个字节(8位),其中第一位恒为0,因此ascii一共可以表示128个字符

    unicode每个字符占用两个字节(16位),可以用来表示汉字

    链接:https://www.zhihu.com/question/23374078/answer/24385963
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     

    关于UTF-8

    UTF-8 顾名思义,是一套以 8 位为一个编码单位的可变长编码。会将一个码位编码为 1 到 4 个字节:

    unicode和ascii都是一种对字符的编码方式,规定了字符的二进制表示,却没规定这个二进制代码如何存储。

    所以在一个系统中,如何正确的区分unicode和ascii编码呢?于是就有了utf-8,utf-8主要就是对【字符的二进制代码】进行编码

    utf-8如何编码

    对于单字节,utf-8就使用一个字节编码,第一位为0,剩下七位为【字符的二进制代码】,这和ascii是一样的。

    对于多字节来说,假设是N字节,那么对于第一个字节来说前N位都是1,第N+1位是0,第二个字节前两位是10,第三个及后面的字节前两位也都是10,余下的位就用【字符的二进制代码】补充。

    这就是对utf-8对unicode即【字符的二进制代码】的一种编码方式。

    utf-8如何解码

    如何第一位是0,表示是这个字节就是一个字符,如果第一位是1,统计一下一共多少个1,1的个数就表示字符的字节数

     
    在UTF-8中字母占一个字节,汉字占三个字节

    python中的字符编码问题

    在python中默认的字符编码方式是ansii,所以当输入中文时会报错,这是需要在第一行加上#encoding=utf-8,就可以将中文用utf-8来进行编码了,对于英文来说它的编码方式还是ansii,

    对于unicode来说,他就直接采用unicode编码方式

    #encoding=utf-8
    import chardet //查看字符串编码方式
    a = '哈哈'
    b = 'abc'
    c = u'你好'
    
    print len(a) //utf-8,一个字符三位
    print len(b)
    print len(c) //unicode为什么是两位
    print chardet.detect(a)
    print chardet.detect(b)
    print type(a)
    print type(b)
    print type(c)
    
    ------output---------
    
    6
    3
    2
    {'confidence': 0.7525, 'language': '', 'encoding': 'utf-8'}
    {'confidence': 1.0, 'language': '', 'encoding': 'ascii'}
    <type 'str'>
    <type 'str'>
    <type 'unicode'>

    str和unicode转化

    str是对【字符二进制代码】编码后的内容,它可以采用ansii,utf-8进行编码

    unicode -> str 通过 encode('')方法,默认是ansii

    str -> unicode 通过decode('')

    d = a.decode('utf-8') //a为上文
    print type(d)
    
    ------output-------
    <type 'unicode'>

     参考博客:

    http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

    http://blog.51cto.com/9478652/2057896

     

  • 相关阅读:
    mmzrmo4delphi
    了解猫咪,和猫咪更好地相处
    无线分类
    压缩ASPX,替换ASPX多余的空格
    字符串编码转换Unicode>GB2312
    Make sure that the class defined in this code file matches the 'inherits' attribute, and that it extends the correct bas
    ntext、text 和 image (TransactSQL)
    ICON资源
    一个简单的优酷视频链接探测与分享功能
    表单圆角大法(无JS无图片通杀所有浏览器)
  • 原文地址:https://www.cnblogs.com/zhaopAC/p/8659251.html
Copyright © 2011-2022 走看看