如何检测中文字符?

kim_fu 2006-06-12 09:01:04
一个中文是两个字符组成,
假设:AB表示一个汉字的两个字符,CD表示另外一个汉字的两个字符,
那么字符串 ABCD就表示两个汉字
可是如果是 BCD那么在显示该字符串时B字符就显示为一个乱码。
如何才能检测出BC组合是一个非法字符呢?
也就是说,我怎么能检测出A是汉字的第一个字符,而B是汉字的第二个字符。
并且A,B,C,D表示汉字的字符又如何与标准的ASCII码区分呢?
...全文
233 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
TERRYYRRET 2006-06-12
  • 打赏
  • 举报
回复
IsDBCSLeadByte
这个api函数可以用来判断一个char是否是双字节(例如汉字)的字符的第一个字节。
如果一定要判断是否是汉字,可以用IsDBCSLeadByteEx,可以指定Code page.
ISDBCSLeadByte:可以在MSDN中找
laofang 2006-06-12
  • 打赏
  • 举报
回复
http://www.vckbase.com/vckbase/function/viewfunc.asp?id=96
zx_star 2006-06-12
  • 打赏
  • 举报
回复
学习!
gohst001 2006-06-12
  • 打赏
  • 举报
回复
知道编码方式不?
GB的话编码区间定义如下
双字节1区: A1A1—A9FE 图形符号
双字节5区: A840—A9A0 图形符号
------------------
双字节2区: B0A1—F7FE 汉字
双字节3区: 8140—A0FE 汉字
双字节4区: AA40—FEA0 汉字
------------------
双字节用户区1: AAA1—AFFE
双字节用户区2: F8A1—FEFE
双字节用户区3: A140—A7A0

第二部分的3个区间就都是汉字了。

仅仅判断是不是不是大于0x80是不准确的。
lixiaosan 2006-06-12
  • 打赏
  • 举报
回复
方法一:
CString str = "a1你3b好c4";
int nCharCount = 0;//字符个数
int nChineseCount = 0;//汉字个数

for(int i = 0; i < str.GetLength(); i++)
{
if( (BYTE)str[i] < 0x80 ) //字符
{
nCharCount++;
}
else//汉字
{
nChineseCount++;
i++;
}
}

方法二:
IsDBCSLeadByte
WecanHuang 2006-06-12
  • 打赏
  • 举报
回复
...
char c = strTemp.GetAt(i);
if (c & 0x80) // 如果是中文
{
...
i += 2;
}
Kudeet 2006-06-12
  • 打赏
  • 举报
回复
IsDBCSLeadByte可以检测是不是双字节的第一个字节
化外之民 2006-06-12
  • 打赏
  • 举报
回复
mark

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧