所有編碼分為三部分:漢字區、圖形符號區和用戶自定義區。
1.漢字區。包括:
A.GB 2312漢字區。即GBK/2: B0A1-F7FE。GB 2312共有6763個漢字,按原順序排列。
B.GB 13000.1擴展了漢字區域。包括:
(1) GBK .包括GB 13000.1中的6080個CJK漢字。
(2) GBK/4: AA40-FEA0 .包括CJK漢字和8160增補漢字。CJK漢字優先,按UCS碼大小排列;補充漢字(包括偏旁部首和部件)按《康熙字典》頁碼/位置排在最後。
所以判斷漢字的時候,要同時檢查兩個字節。
以下程序供參考。
# include & ltstdio.h & gt
int main()
{
char str[100];
int I = 0;
gets(str);
while ( str[i])
{
無符號字符ch = str[I];//註意要定義為無符號的。
//首先檢查ch是否是字母:
如果((ch & gt= ' a ' & amp& ampch & lt= ' z ')| |(ch & gt;= ' A ' & amp& ampch & lt='Z '))
{
i++;
繼續;
}
其他
{
//再次檢查ch是否為數字:
if(ch & gt;= ' 0 ' & amp& ampch & lt= '9' )
{
i++;
繼續;
}
其他
{
//最後檢查是否是漢字:(按GB 2312漢字區檢查,不考慮特殊漢字B0A1-F7FE)
if(ch & gt;= 0xB0 & amp& ampch & lt= 0xF7)
{
//繼續檢查下壹個字符是否可以組織成漢字。
無符號字符ch 1 = str[I+1];//註意要定義為無符號的。
if(ch 1 & gt;= 0xa 1 & amp;& ampch 1 & lt;= 0xFE)
{
I+= 2;
繼續;
}
}
}
}
Printf("位%d是亂碼\n ",I+1);
i++;
}
返回0;
}