法官Python str包括中文

时间:2013-10-18 06:41:43

标签: python

我想定义一个函数,检查一个字符串是否包含在中文中。例如, check_contain_chinese(“中国”),它返回True。 check_contain_chinese('xx中国'),它返回True,check_contain_chinese(“xxx”),返回False。 有人可以给我一些建议吗?我是大一新生..

3 个答案:

答案 0 :(得分:5)

检查unicode字符的范围,以确定字符串中的字符是否属于中文字符。谷歌搜索告诉我所有汉字都在'\u4e00'u'\u9fff'之间。您可能想要自己验证。

def check_contain_chinese(check_str):
    for ch in check_str.decode('utf-8'):
        if u'\u4e00' <= ch <= u'\u9fff':
            return True
    return False

答案 1 :(得分:3)

此处所有现有答案都将 CJK (代表中文,日文和韩文)字符与 Han 字符(仅代表中文)字符混为一谈。

很容易判断一个角色是否是CJK,但更难判断一个角色是否是中文且标准是否正在改变,总是会添加新角色。

但在实践中,人们通常使用 u'\ u4e00' - u'\ u9fa5'来检查一个角色。超出该范围的CJK字符通常不能用普通的中文字体显示。

有时候CJK Radicals SupplementBopomofoCJK Strokes也应该被视为字符,而且它们甚至不在CJK统一表意文字中('\ u4e00'-u'\ u9fff')但它们在中文书写系统中很常见且很重要。

参考:

CJK characters

CJK Unified Ideographs

Unihan Database Lookup

GB 2312 to Unicode

GB 12345 to Unicode

答案 2 :(得分:2)

中文字符有six Unicode maps。只需检查字符串中任何字符的代码是否符合0x4E00 - 0x9FFF间隔:

>>> any(0x4E00 <= ord(x) <= 0x9FFF for x in u'xx中国')
1: True
>>> any(0x4E00 <= ord(x) <= 0x9FFF for x in u'xxx')
2: False