漢字字符的編碼為雙字節,對於漢字字符和單字節字符混排的情況,如果目標截取的字符串內只包含奇數個單字節字符,則會出現半個漢字字符的問題。如下所示:
(1)天水市秦州區南郭路2號(工行七里墩分理處? --包含數字字符,單字節。
(2)七里河區金港城金福花園20號樓3號(金港城?--包含數字字符,單字節。
(3)甘肅銀馨春天餐飲服務業有限責任公司(省委? --包含英文格式半括號。
以上為截取字符串前四位以后的顯示結果,其中“?”為半個漢字編碼的顯示。要想解決以上問題可以采用截取最后一個非法字符,並用合法字符替換的方法。實例代碼如下所示:
#include <stdio.h>
int chkHalfChinese(char *buf,int len)
{
int i = 0;
int cnt = 0;
int idx;
for(i=0;i<len;i++)
{
int value = buf[i]&0xFF;
if(value>160)
{
cnt++;
idx=i;
}
}
if(cnt%2)
{
buf[idx] =' ';
return(1);
}
else
{
return(0);
}
}
int main(void)
{
char str[44] = "天水市秦州區南郭路2啊(工行七里墩分理處里家";
if(chkHalfChinese(str,40)==1)
{
printf("true\n");
}
else
{
printf("false\n");
}
printf("%s\n",&str);
return 0;
}
程序代碼在Linux環境下測試通過,運行結果如下圖所示: