65,020
社区成员
发帖
与我相关
我的任务
分享
long GetBig5Count(char *str)//如果此函数返回值大于零,则表明传入的字符串极可能是繁体
{
int lnBIG5 = 0;//用於統計可能是繁體字的漢字個數
int lnGB = 0;//用於統計可能是簡體字的漢字個數
int liTranLen = strlen(str);
for(int liT = 0; liT<liTranLen-1; liT++)
{
//尾字節40-7E是BGI5碼特有的,如果掃描到這種編碼說明此字元串是繁體(經測試:有例外,可能是漢字的最後一個編碼與英文編碼組合而成的)
if((BYTE)(BYTE)str[liT]>=161 && (BYTE)(BYTE)str[liT]<=254 && (BYTE)(BYTE)str[liT+1]>=64 && (BYTE)(BYTE)str[liT+1]<=126)
lnBIG5 ++;
//首字節A4-A9在GB中為日文假名,希臘字母,俄文字母和制表符,正常文本中很少出現,而這個範圍是BIG5的常用漢字,所以認為這是BIG5碼
if((BYTE)(BYTE)str[liT]>=164 && (BYTE)(BYTE)str[liT]<=169 && (BYTE)(BYTE)str[liT+1]>=161 && (BYTE)(BYTE)str[liT+1]<=254)
lnBIG5 ++;
//GB中首字節AA-AF沒有定義,所以首字節位於AA-AF之間,尾字節位於A1-FE的編碼幾乎100%是BIG5(經測試:沒有100%),認為是BIG5碼
if((BYTE)(BYTE)str[liT]>=170 && (BYTE)(BYTE)str[liT]<=175 && (BYTE)(BYTE)str[liT+1]>=161 && (BYTE)(BYTE)str[liT+1]<=254)
lnBIG5 ++;
//首字節C6-D7,尾字節A1-FE在GB中屬於一級字庫,是常用漢字,而在BIG5中,C6-C7沒有明確定義,但通常用來放日文假名和序號,C8-D7屬於罕用漢字區,所以可認為是GB碼
if((BYTE)(BYTE)str[liT]>=196 && (BYTE)(BYTE)str[liT]<=215 && (BYTE)(BYTE)str[liT+1]>=161 && (BYTE)(BYTE)str[liT+1]<=254)
lnGB ++;
}
//如果掃描完整個字元串,可能是簡體字的數目比可能是繁體字的數目多就認為是簡體字不轉簡(不一定准确)
return lnBIG5-lnGB;
}