判断是否为繁体字

53 篇文章 1 订阅
24 篇文章 0 订阅
///
//      判断是否为繁体
///
BOOL IsBig5(char *str)
{
 int lnBIG5 = 0;//用於統計可能是繁體字的漢字個數
 int lnGB = 0;//用於統計可能是簡體字的漢字個數
 int liTranLen = strlen(str);

 for(int liT = 0; liT<liTranLen; liT++)
 {
  //尾字節40-7E是BGI5碼特有的,如果掃描到這種編碼說明此字元串是繁體(經測試:有例外,可能是漢字的最後一個編碼與英文編碼組合而成的)
  if(str[liT]>=161 && str[liT]<=254 && str[liT+1]>=64 && str[liT+1]<=126)
   lnBIG5 ++;

  //首字節A4-A9在GB中為日文假名,希臘字母,俄文字母和制表符,正常文本中很少出現,而這個範圍是BIG5的常用漢字,所以認為這是BIG5碼
  if(str[liT]>=164 && str[liT]<=169 && str[liT+1]>=161 && str[liT+1]<=254)
   lnBIG5 ++;
  
  //GB中首字節AA-AF沒有定義,所以首字節位於AA-AF之間,尾字節位於A1-FE的編碼幾乎100%是BIG5(經測試:沒有100%),認為是BIG5碼
  if(str[liT]>=170 && str[liT]<=175 && str[liT+1]>=161 && str[liT+1]<=254)
   lnBIG5 ++;
  
  //首字節C6-D7,尾字節A1-FE在GB中屬於一級字庫,是常用漢字,而在BIG5中,C6-C7沒有明確定義,但通常用來放日文假名和序號,C8-D7屬於罕用漢字區,所以可認為是GB碼
  if(str[liT]>=196 && str[liT]<=215 && str[liT+1]>=161 && str[liT+1]<=254)
   lnGB ++;
 }

 //如果掃描完整個字元串,可能是簡體字的數目比可能是繁體字的數目多就認為是簡體字不轉簡(不一定准确)
 if(lnGB > lnBIG5)
  return FALSE;
 else
  return TRUE;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值