utf-8变长

utf-8变长

变长规则

一字节:0*******
两字节:110,10*
三字节:1110,10,10****
四字节:11110**,10******,10,10*

如果是以0开头的,那么他就是一个1字节编码.

如果是以110开头的,那么他就是一个2字节编码,而且他的第二个字节一定要是10开头,不然就是乱码了.

后面的以此类推.

utf-8变长的算法就是把0,10,110,1110,11110这五种比特的情况用在不同的位置而区分开各种编码.这在TCP/IP网络协议中也有类似的用法.比如几类IP地址的划分.

汉字的utf-8范围

  • 占三个字节的范围

U+2E80 - U+2EF3 : 0xE2 0xBA 0x80 - 0xE2 0xBB 0xB3 共 115 个  
U+2F00 - U+2FD5 : 0xE2 0xBC 0x80 - 0xE2 0xBF 0x95 共 213 个  
U+3005 - U+3029 : 0xE3 0x80 0x85 - 0xE3 0x80 0xA9 共 36 个  
U+3038 - U+4DB5 : 0xE3 0x80 0xB8 - 0xE4 0xB6 0xB5 共 7549 个  
U+4E00 - U+FA6A : 0xE4 0xB8 0x80 - 0xEF 0xA9 0xAA 共 44138 个  
U+FA70 - U+FAD9 : 0xEF 0xA9 0xB0 - 0xEF 0xAB 0x99 共 105 个 

  • 占4个字节的范围

U+20000 - U+2FA1D : 0xF0 0xA0 0x80 0x80 - 0xF0 0xAF 0xA8 0x9D 共 64029 个 

python简单判断是否是utf-8是否是汉字的方法


def is_Chinese(word):
    for ch in word:
        if not ('\u4e00' <= ch <= '\u9fff'):
            return False
    return True

posted @ 2019-01-15 19:21  agichen  阅读(540)  评论(0编辑  收藏  举报