如何判别CString串中的字符是否是中文字
如题。应该是很简单,请各位不要笑话我。我是想区别一个 CString 类型的字符串里的中文汉字和英文字母。 问题点数:50、回复次数:18Top
1 楼steedhorse(晨星)回复于 2005-04-04 09:42:10 得分 15
如果是GBK编码,中文的第一个字节首位为1。
如果是Unicode,那么英文的编码还是等于他的Ascii码,只要>128的肯定不是英文。(当然,有可能是日本、韩文、阿拉伯文或者其他的什么文,或者数学符号)。:(
一般的情况,这样粗略判断一下就可以了。
不过,你可以上网查查,不管是GBK,GB2312,还是Unicode,汉字每个字节的编码范围都是可以查到的。Top
2 楼Saimen(沉默是金)回复于 2005-04-04 09:44:26 得分 5
来晚了,
完全同意楼上的Top
3 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-04-04 09:53:02 得分 1
可以直接从字符地址判断,中文2字节,英文1字节.
Top
4 楼xqk(夏乾坤)回复于 2005-04-04 10:04:41 得分 6
汉字的组成是2个大于127字节的非标准ASCII码,也就是说两个字节的(8位)第1位都是1
如果是英文或符号的话,那么就是标准的ASCII码,也就是说8位的第1位是0
所以用如下的方法判断
CString str = "汉字";
for(int i=0;i<str.GetLength();i++)
{
char c = str.GetAt(i);
if(c > 127)MessageBox("汉字好像是");
else MessageBox("字符好像是");
}
//但如果在字母之间包函好几个汉字的话,那么要做截取操作,就必须设置标志了,麻烦一些Top
5 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-04 10:09:20 得分 3
可以通过ASCII码来判断Top
6 楼signoft(晴天)回复于 2005-04-04 10:24:50 得分 4
CSDN有一篇文档是专门关于汉字和字母截取讨论的
楼主可以去研究一下
http://dev.csdn.net/develop/article/66/66387.shtmTop
7 楼taotao7805(韬滔)回复于 2005-04-04 10:26:13 得分 4
在一个程序中判断是否含有中文字符:
中文字符最高位为1, 并占2个字节,
而字母数字符号等最高位为0, 占1个字节
char buf[50];
则
if(buf[i]&0x80)
//表示是中文符号
else
//英文符号Top
8 楼tyro1(栖息的飞鸟)回复于 2005-04-04 11:49:18 得分 4
同意xqk(夏乾坤)
//但如果在字母之间包函好几个汉字的话,那么要做截取操作,就必须设置标志了,麻烦一些
..
if(c>127)
{
MessageBox..;
i++;
}Top
9 楼Programmerjacinth(阿聪)回复于 2005-04-04 12:02:15 得分 0
狂晕,我是这么写的:
CString t;
t = p.GetAt(i);
if (t>'127')
{
continue;//是汉字
}
else
{
//输出
}
结果输出的全部是汉字~~~!!谁能解释下啊~!我到底该相信谁啊?Top
10 楼steedhorse(晨星)回复于 2005-04-04 12:03:49 得分 0
t>'127'
改成:
t>127Top
11 楼steedhorse(晨星)回复于 2005-04-04 12:06:06 得分 0
如果非要加单引号,请用'\xff'或者'\377'。Top
12 楼steedhorse(晨星)回复于 2005-04-04 12:08:46 得分 0
哦,不对,应该:
((unsigned char)t > (unsigned char)127)
还有,对于GBK编码,汉字的第二个字节未必大于127,所以只要发现一个大于127的,后边那个不管是否大于127,都是汉字的第二个字节,应该跳过去。Top
13 楼fvan(RainVan)回复于 2005-04-04 12:15:00 得分 2
求算得的中文字符的Ascii码都是小于0的五位整数,不过是用VB求的。Top
14 楼domustdohz(迷茫)回复于 2005-04-04 12:15:07 得分 1
markTop
15 楼domustdohz(迷茫)回复于 2005-04-04 12:17:20 得分 0
markTop
16 楼qrlvls( 空 气 )回复于 2005-04-04 12:55:52 得分 1
agree to steedhorse(晨星)Top
17 楼Programmerjacinth(阿聪)回复于 2005-04-04 13:59:42 得分 0
哦,这回对了,可是谁能解释下我贴的那段代码为什么判断中文和字母正好会反过来吗?Top
18 楼allen7757(漫步VS新月)回复于 2005-04-04 14:39:22 得分 4
汉字最高位为1,所以大于127的就是汉字。
char aa=m_message.GetAt(i);
if(aa>=128||aa<0)
i++;Top




