3

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

4

3 回答 3

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
于 2013-10-18T07:00:55.043 回答
3

这里所有现有的答案都将CJK(代表中文、日文和韩文)字符与字符(仅代表中文)字符混淆了。

判断一个字符是否是 CJK 很容易,但很难判断一个字符是否为中文,而且标准在变化,新字符一直在添加。

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

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

参考:

中日韩字符

中日韩统一表意文字

Unihan 数据库查找

GB 2312 转 Unicode

GB 12345 转 Unicode

于 2013-10-18T07:34:16.073 回答
2

汉字有六个 Unicode 映射。只需检查字符串中任何字符的代码是否适合 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
于 2013-10-18T07:01:26.920 回答