LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1208|回复: 6

如何判断是否为中文?

[复制链接]
发表于 2006-10-15 14:29:24 | 显示全部楼层 |阅读模式
有一个字符串"我的名字是linux先生,我的email是xxx@linuxsir.cn。"
其中有英文字母,英文标点,有中文字,有中文标点。
linux下有没有和windows下IsDBCSLeadByte类似的函数?
发表于 2006-10-15 14:55:14 | 显示全部楼层
不知道有没有类似的函数

不过汉字编码在不同的编码方式下编码范围不同
回复 支持 反对

使用道具 举报

发表于 2006-10-15 16:28:42 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2006-10-15 21:09:28 | 显示全部楼层
汉字在内存中占用两字节,(gbk/gb2312/gb18030这几种编码好像都是)
但汉字与英文字母在内存中最大的区别就是汉字占用两字节的首位都是1,而英文字母是0

之所以你可以用位运算可以查出是否为汉字

String str = "我的名字是linux先生,我的email是xxx@linuxsir.cn。";
for (int i = 0; i < str.length(); i++)
{
     if (str & 0xff00)
     {
             //...         cout << " the character is chinese";
             i++;
     }
     else
     {
            //...         cout << " the character is english";
     }
}
回复 支持 反对

使用道具 举报

发表于 2006-10-16 10:25:12 | 显示全部楼层
4楼的方法恐怕是不准确的吧
回复 支持 反对

使用道具 举报

发表于 2006-10-16 16:14:02 | 显示全部楼层
Post by x11
4楼的方法恐怕是不准确的吧


那應該怎樣去判別才好呢. 我也想學習學習.. 請指教. thx
回复 支持 反对

使用道具 举报

发表于 2006-10-17 16:12:54 | 显示全部楼层
在UNICODE中的CJK字符都定义在一个范围内,遍历字符看看有没有这个范围内的字符就可以了.当然要用std::wstring来存放这个串.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表