zoukankan      html  css  js  c++  java
  • 字符编码

    1、概念

    字符“hello world" 是unicode 字符集,utf-8和gbk为字符编码方式。

    ASCll有编码方式和ASCII字符集

    编码:是将对应的字符集中的的字符转化为二进制存储,打印时方便看自动转为16进制

    解码:是将二进制的数据转化成对应字符集中的字符。

    2、Unicode使用

    3、Unicode字符集中的utf-8编码方式

    UTF-8 属于变长的编码方式,它可以由 1,2,3,4 四种字节组合,使用的是高位保留的方式来区别不同变长,具体方式如下:

    1. 对于只有一个字节的符号,字节的第一位设为0,后面 7 位为这个符号的 Unicode 码。此时,对于英语字母UTF-8 编码和 ASCII 码是相同的。
    2. 对于 n 字节的符号(n > 1),第一个字节的前 n 位都设为 1,第 n + 1 位设为0,后面字节的前两位一律设为 10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码,如下表所示
      根据上表,编码字符时就非常简单了,以汉字 “丑” 为例,它的码点为 0x4E11(0100 1110 0001 0001)在上表的第三行范围(0000 0800 ~ 0000 FFFF)内,因此 “丑” 需要以三个字节的形式编码:

                

        

    这里最高位的第一个字节中的三个 1 表示该字符占 3 个字节,空出的 16 位 x 就会从 “丑” 的最后一个二进制位开始,依次从后向前填入格式中,多出的位补 0,这样就得到了 “丑” 的 UTF-8 编码是 11100100 10111000 10010001,转换成十六进制就是 E4B891。

    a=""
    a.encode("utf-8")
    b'xe4xb8x91'

    解码 UTF-8 编码也很简单了,如果一个字节的第一位是 0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个 1,就表示当前字符占用多少个字节,”丑” 有三个 1 表示占三个字符,然后取出有效位即可。

    4、检测对象的编码方式

    使用chardet

    import chardet
    
    m = '我们都是中国人'.encode('gbk')
    print(m)
    
    l = chardet.detect(m)
    
    print(l)

    输出

    b'xcexd2xc3xc7xb6xbcxcaxc7xd6xd0xb9xfaxc8xcb'
    {'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
    #confidence表示准确度
    人生苦短,我用cnblog
  • 相关阅读:
    【ansible】 笔记 (1)
    centos 把网卡名称修改为 eth0
    服务器从购买到交付使用流程
    (转载) Linux IO模式及 select、poll、epoll详解
    孤儿进程、僵尸进程和守护进程
    (转载)linux下各个文件夹的作用
    缓存穿透与缓存雪崩
    SpringCloud核心组件在微服务架构中的作用
    双十一电商Java开发聊聊秒杀限流的多种实现
    localhost 和 127.0.0.1 的区别
  • 原文地址:https://www.cnblogs.com/wuzhibinsuib/p/13829441.html
Copyright © 2011-2022 走看看