當前位置:成語大全網 - 書法字典 - 如何區分亂碼和正常字

如何區分亂碼和正常字

漢字的GBK編碼用兩個字節表示,整體編碼範圍是8140-FEFE,第壹個字節在81-FE之間,最後壹個字節在40-FE之間,不包括壹行xx7F。總共23,940個碼點,* * *包含265,438+0,886個漢字和圖形符號,其中265,438+0,003個漢字(包括偏旁部首和部件)和883個圖形符號。

所有編碼分為三部分:漢字區、圖形符號區和用戶自定義區。

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;

}