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...