我想定义一个函数,检查一个字符串是否包含中文。例如 check_contain_chinese("中国"),它返回 True。check_contain_chinese('xx中国'),返回True,check_contain_chinese("xxx"),返回False。有人可以给我一些建议吗?我是大一。。
问问题
460 次
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 Supplement,Bopomofo,CJK Strokes也应该被视为字符,它们甚至在 CJK 统一表意文字中都没有('\u4e00'- u'\u9fff'),但它们在中文书写系统中很常见且很重要.
参考:
于 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 回答