扫码关注官方订阅号
ringa_lee
在python3中,str默认是unicode编码
用 ord() 函数判断单个字符的unicode编码是否大于255即可。
255
一般来说,中文常用字的范围是:[\u4e00-\u9fa5]
[\u4e00-\u9fa5]
准确点判断中文字符,可以这样比较:
>>> X,Y = ['\u4e00','\u9fa5'] >>> X<='阿'<=Y True
例子:
>>> a = "你好";b = "</p>你好" >>> def isAllZh(s): for c in s: if not('\u4e00' <= c <= '\u9fa5'): return False return True >>> isAllZh(a) True >>> isAllZh(b) False #或者用 all() >>> all(map(lambda c:'\u4e00' <= c <= '\u9fa5',a)) True >>> all(map(lambda c:'\u4e00' <= c <= '\u9fa5',b)) False
既然 @依云 提出了编码范围的问题,就再补充一些~
详细的unicode分区信息可以参考这里:中日韩统一表意文字
楼主是问 判断中文的算法;很简单,就是比较字符编码的大小,落在cjk文字范围内,就是中文。出了[\u4e00-\u9fa5]范围的汉字,多数是生僻字、异体字;如果很在意的话,可以参照下表,多加几个判断条件即可。中文在unicode里的分区码段:
算法
cjk
1、中日韩扩展部首[2E80-2EFF](116字) 2、康熙字典部首[2F00-2FDF](214字) 3、表意文字描述字符[2FF0-2FFF](12字) 4、中日韩笔画[31C0-31EF](37字) 5、中日韩统一表意文字扩展A区[3400-4DBF](6582字) 6、中日韩统一表意文字[4E00-9FFF](20940字) 7、私用区[E000-F8FF](896字) 8、中日韩兼容表意文字[F900-FAFF](471字) 9、中日韩统一表意文字扩展B区[20000-2A6DF](42711字) 10、中日韩统一表意文字扩展C区[2A700-2B73F](4149字) 11、中日韩统一表意文字扩展D区[2B740-2B81F](222字) 12、中日韩统一表意文字增补集[2F800-2FA1F](542字) 13、增补私用A区[F0000-FFFFF](73字)
简单啦,你用正则匹配一下英文,标点,数字不就可以了么?
regex
>>> import regex >>> zh = regex.compile(r'^\p{Han}*$') >>> zh.match('你好') <regex.Match object; span=(0, 2), match='你好'> >>> zh.match('<p>好') >>>
只能保证是汉字,不能保证是中文,也可能是日文。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
在python3中,str默认是unicode编码
用 ord() 函数判断单个字符的unicode编码是否大于
255即可。一般来说,中文常用字的范围是:
[\u4e00-\u9fa5]准确点判断中文字符,可以这样比较:
例子:
既然 @依云 提出了编码范围的问题,就再补充一些~
详细的unicode分区信息可以参考这里:中日韩统一表意文字
楼主是问 判断中文的
算法;很简单,就是比较字符编码的大小,落在cjk文字范围内,就是中文。出了
[\u4e00-\u9fa5]范围的汉字,多数是生僻字、异体字;如果很在意的话,可以参照下表,多加几个判断条件即可。中文在unicode里的分区码段:
简单啦,你用正则匹配一下英文,标点,数字不就可以了么?
regex
只能保证是汉字,不能保证是中文,也可能是日文。