C 擷取字串中的漢字

2021-09-06 09:28:13 字數 2794 閱讀 1034

1、

constchar*str ="test測試test";

while(*str)

else

}

2、

參看下面的字串轉換函式。

/**

* 用getbytes(encoding):返回字串的乙個byte陣列

* 當b[0]為 63時,應該是轉碼錯誤

* a、不亂碼的漢字字串:

* 1、encoding用gb2312時,每byte是負數;

* 2、encoding用iso8859_1時,b[i]全是63。 

* b、亂碼的漢字字串:

* 1、encoding用iso8859_1時,每byte也是負數;

* 2、encoding用gb2312時,b[i]大部分是63。

* c、英文本串

* 1、encoding用iso8859_1和gb2312時,每byte都大於0;

* 總結:給定乙個字串,用getbytes("iso8859_1")

* 1、如果b[i]有63,不用轉碼; a-2

* 2、如果b[i]全大於0,那麼為英文本串,不用轉碼; b-1

* 3、如果b[i]有小於0的,那麼已經亂碼,要轉碼。 c-1

*/ private static string togb2312(string str)

} } catch (unsupportedencodingexception e)

return retstr;

} 3、

unsignedchar*str ="test測試test";

intlength;

inti;

length =strlen(str);

for(i = 0; i < length - 1; i++)

}

unsignedchar*str="test測試test";//把字串換成「漢a」試試,結果為2

有人說:「乙個gbk漢字要佔兩個char空間(二位元組),而且第乙個位元組裡的值是小於0的。可以據此判斷是否為漢字。」

1、為什麼第乙個位元組的值小於0呢?

2、如果僅通過判斷第乙個位元組如果小於0,則該位元組和下乙個位元組就組成乙個漢字,這種邏輯是否保險?

3、因為還看到有人說,gbk編碼的漢字有高位和低位兩位,第乙個是低位吧?需要第乙個位元組在160-254之間,第二個位元組在64-254之間,這樣是不是比2中提到的方法要保險?

4、如果db中的字符集是simplified chinese_china.zhs16gbk,這個是gbk字符集?gbk相容gb2312

似乎有些字符集中有些漢字佔三個位元組

「通過判斷第乙個位元組如果小於0,則該位元組和下乙個位元組就組成乙個漢字」

//gbk漢字內碼範圍

//81-a0 ,40-7e 80-fe

//aa-af ,40-7e 80-a0

//b0-d6 ,40-7e 80-fe

//d7 ,40-7e 80-f9

//d8-f7 ,40-7e 80-fe

//f8-fe ,40-7e 80-a0

例如://81-a0 ,40-7e 80-fe

表示字元的ascii碼要在129-160,64-126,128-254這三個區間段內

4、 在工作中,遇到要擷取字串在螢幕上顯示出來,因為字串帶有漢字,如果擷取不好,會引起亂碼,寫了下面的函式

在uclinux下與vc6.0中測試可以通過。

view plaincopy to clipboardprint?

1. /*擷取字串

2. name :要擷取的字串

3. store:要儲存的字串

4. len:要擷取的長度

5. */ 

6. void split_name( char * name , char * store , int len ) 

7. ; 

10.      

11.     if ( strlen(name)

12.      

16.  

17.     //從第1個位元組開始判斷 

18.     while( i < len ) 

19.      

25.     i = i > len ? i-3 :i-1; 

26.     strncpy( store , name , i+1 ); //擷取前i+1位 

27.     *(store+i+1)=0; 

28.     strcpy( strtemp , name + i + 1 ); 

29.     strcpy( name , strtemp ); 

30. } 

擷取字串(包括漢字)

程式設計 編寫乙個擷取字串的函式,輸入為乙個字串和位元組數,輸出為按位元組擷取的字串。但是要保證漢字不被截半個,如 我 abc 4,應該截為 我 ab 輸入 我 abc 漢 def 6,應該輸出為 我 abc 而不是 我abc 漢的半個 public class splitstr 計算輸入字串的總位...

C 中擷取字串

string substring int beginindex string substring int beginindex,int endindex string.substring int32 子字串從指定的字元位置開始。string.substring int32,int32 子字串從指定的...

C 擷取字串

1.根據單個分隔字元用split擷取 string st gt123 1 string sarray st.split 即可得到sarray 0 gt123 sarray 1 1 2.利用多個字元來分隔字串 string str gtazb jiangjben 123 string sarray s...