漢字字元的編碼為雙位元組,對於漢字字元和單位元組字元混排的情況,如果目標截取的字元串內只包含奇數個單位元組字元,則會出現半個漢字字元的問題。如下所示: (1)天水市秦州區南郭路2號(工行七里墩分理處? --包含數字字元,單位元組。 (2)七里河區金港城金福花園20號樓3號(金港城?--包含數字字元,單位元組。 ...
漢字字元的編碼為雙位元組,對於漢字字元和單位元組字元混排的情況,如果目標截取的字元串內只包含奇數個單位元組字元,則會出現半個漢字字元的問題。如下所示:
(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環境下測試通過,運行結果如下圖所示: