简介

python在执行代码过程是不知道这个字符是什么意思的、是否是中文,而是把所有代码翻译成二进制也就是000111这种形式,机器可以看懂的语言。  也就是在计算机中所有的字符都是有数字来表示的。汉字也是有数字表示的,Unicdoe4E00~9FFF表示中文,所以如果一个字符的utf-8编码在这个区间内,就说明它是中文。

中文编码对应表

GBK UTF16 UTF8 汉字
D2BB 4E00 E4 B8 80
B6A1 4E01 E4 B8 81
C6DF 4E03 E4 B8 83
CDF2 4E07 E4 B8 87
D5C9 4E08 E4 B8 88
C8FD 4E09 E4 B8 89
C9CF 4E0A E4 B8 8A
CFC2 4E0B E4 B8 8B
D8A2 4E0C E4 B8 8C

实践

1. 判断utf-8 代码如下:

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

2. 测试用例:

#-*- coding:utf-8 -*-
 
import sys
reload(sys)
sys.setdefaultencoding('utf8')
 
def check_contain_chinese(check_str):
    for ch in check_str.decode('utf-8'):
        if u'\u4e00' <= ch <= u'\u9fff':
            return True
    return False
 
if __name__ == "__main__":
    print check_contain_chinese('中国')
    print check_contain_chinese('xxx')
    print check_contain_chinese('xx中国')

结果:
True
False
True

3. 判断字符包含中文:

 def is_not_en_word(self, word:str):
     '''
     判断一个词是否是非英文词,只要包含一个中文,就认为是非英文词汇
     :param word:
     :return:
     '''
     count = 0
     for s in word.encode('utf-8').decode('utf-8'):
         if u'\u4e00' <= s <= u'\u9fff':
             count += 1
             break
     if count > 0:
         return True
     else:
         return False

 def is_en_mail(self, mail_text:str):
     '''
     判断一个词是否是非英文词,只要包含一个中文,就认为是非英文词汇
     :param word:
     :return:
     '''
     tmp_text = ''.join(mail_text.split())
     count = 0
     print('tmp_text:', tmp_text)
     for s in tmp_text.encode('utf-8').decode('utf-8'):
         if u'\u4e00' <= s <= u'\u9fff':
             count += 1
     if float(count/(tmp_text.__len__())) > 0.1:
         return False
     else:
         return True

小结

参考: https://blog.csdn.net/QFire/article/details/82753726
https://blog.csdn.net/lanSeFangZhou/article/details/124163110

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐