漢子字元轉換與擷取

2021-07-15 09:54:30 字數 2466 閱讀 4387

下面是幾個有意思的函式,主要是用於存在漢字字元時的轉換和擷取功能,挺好用,在這裡記錄一下。

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 = 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?

複製**

**如下:

/*擷取字串

name :要擷取的字串

store:要儲存的字串

len:要擷取的長度

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

;if ( strlen(name)

{strcpy( store, name );  *name=0;

return ;

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

while( i < len )

if ( name[i]>>7&1 && name[i+1]>>7&1 )       //if ( name[i] < 0 && name[i+1] < 0 )

i = i + 2 ;

else

i = i + 1 ;

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

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

*(store+i+1)=0;

strcpy( strtemp , name + i + 1 );

strcpy( name , strtemp );

OC字串分割,擷取,轉換,拼接

本篇文章主要闡述ios字串分割,擷取,轉換,拼接的一些邏輯,看是否含有分割符,主要介紹了兩種方式,一種沒有任何分割符的資料,乙個帶有分割符的資料。1,進行分割,每兩個一組 2,把資料分割之後,要進行去掉最後一位,給他們交換位置,再進行字串拼接。nsstring arre0 arr objectati...

判斷字串是否包含漢子

如下 using system using system.collections.generic using system.linq using system.text using system.text.regularexpressions 判斷表示是否全為英文 判斷字串中是否包含中文 需要判斷的...

mysql字元擷取

substring index str,delim,count 返回字串 str 中在第 count 個出現的分隔符 delim 之前的子串。如果 count 是乙個正數,返回從最後的 從左邊開始計數 分隔符到左邊所有字元。如果 count 是負數,返回從最後的 從右邊開始計數 分隔符到右邊所有字元...