C 中漢字字串的擷取

2022-09-29 22:27:19 字數 2037 閱讀 7367

1、

複製** **如下:

const char *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、

複製** **如下:

unsigned char *str = "test測試test";

int length;

int i;

length = s程式設計客棧trlen(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?

複製** **如下:

/*擷取字串

name :要擷取的字串

store:要儲存的字串

len:要擷取的長度

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

;      if ( strlen(name)

本文標題: c++中漢字字串的擷取

本文位址:

C 中漢字字串的擷取

g main.cpp 進行編譯。為了解決限定長度的賦值,如果出現半個中文,則採取截斷措施,解決中文亂碼問題。include include include using namespace std define max size 32 int chinese split std string str,...

擷取包含漢字字串的子字串

擷取字串 本書字數 209.9萬字 中間的數字209.9 char test 10 測試 printf s d n test,int strlen test 得到結果是6也就是說每個漢字占用6個字元 然後測試目標字串的大小 char strlen tmp 40 本書字數 209.9萬字 printf...

C語言,擷取帶有漢字 字母的字串函式

在工作中,遇到要擷取字串在螢幕上顯示出來,因為字串帶有漢字,如果擷取不好,會引起亂碼,寫了下面的函式 在uclinux下與vc6.0中測試可以通過。擷取字串 name 要擷取的字串 store 要儲存的字串 len 要擷取的長度 void split name char name char stor...