- 論壇徽章:
- 0
|
本帖最后由 眨眼懂得 于 2011-12-05 09:19 編輯
c++ ,感覺還不錯(cuò),在北大青鳥也是學(xué)習(xí)了一段時(shí)間的,課程不難,但是想要學(xué)習(xí)更深的東西,也是靠自己學(xué)習(xí)的。
使用sqlite3開發(fā),中間需要用中文,XE的缺省char*直接使用中文,在sqlite *.db3的數(shù)據(jù)庫表格中顯示是亂碼,用數(shù)據(jù)庫管理器來瀏覽等管理時(shí)非常不便。
于是決定還是使用utf-8的String數(shù)據(jù)類型,但在sqlite的API中,輸入字符串參數(shù)均為char*,直接使用String是編譯通不過的,在csdn,谷哥,度娘等搜索,不知道是關(guān)鍵字沒設(shè)置好還是什么,說的都不得要領(lǐng),后來找到有人會(huì)寫一段程序,用逐個(gè)字符翻譯的方式轉(zhuǎn)換,我心不甘,于是試了幾天,試出一個(gè)更加簡便的方式,列出給各位。
我使用的編譯器是RAD XE, Sqlite版本3.7.9, 數(shù)據(jù)庫管理器是sqlite expert 3.3.52。
直接使用字符串,由于編譯為GBK,導(dǎo)致管理器瀏覽出來是亂碼。
int iRet;
sqlite3 *psqlite3;
char *pQuery, *pErrMsg;
iRet = sqlite3_open( "c:\\test.db3", &psqlite3 );
pQuery = "INSERT INTO table1 (idno,user,pass) VAULES( 1, 'GBK中文', '直接使用char類型' );";
iRet = sqlite3_exec( psqlite3, pQuery, NULL, NULL, &pMsg );
sqlite3_close( psqlite3 );
而當(dāng)使用String類型,在如下轉(zhuǎn)換后, sqlite expert正常顯示中文,表明使用了utf-8編譯成功.
int iRet;
sqlite3 *psqlite3;
char *pQuery, *pErrMsg, QueryBuf[512];
String strUtf8;
RawByteString strRaw;
strUtf8 = "INSERT INTO table1 (idno,user,pass) VAULES( 1, 'Utf8中文', '使用String類型再轉(zhuǎn)' );";"
strRaw = UTF8Encode(strUtf ;
strcpy( QueryBuf, strRaw.c_str() );
iRet = sqlite3_open( "c:\\test.db3", &psqlite3 );
iRet = sqlite3_exec( psqlite3, QueryBuf, NULL, NULL, &pMsg );
sqlite3_close( psqlite3 );
測試后看,utf-8格式顯示中文成功。
這里的關(guān)鍵是,把String類型utf-8,使用UTF8Encode系統(tǒng)函數(shù),轉(zhuǎn)換成RawByteString,然后使用RawByteString類型的成員函數(shù)c_str(),可轉(zhuǎn)換成char*類型,而內(nèi)容是utf-8格式的,這樣在傳進(jìn)sqlite api后,可正常作為utf-8的內(nèi)容。
內(nèi)容不多,但是希望對大家有幫助。詳情可以:http://www.52benet.cn |
|