C++Builder RAD Studio XE, UTF-8 String 轉換爲 char * 字符串的最簡單方式, 經常使用於sqlite3開發

前段時間忽然使用sqlite3開發,中間須要用中文,XE的缺省char*直接使用中文,在sqlite *.db3的數據庫表格中顯示是亂碼,用數據庫管理器來瀏覽等管理時很是不便。

  因而決定仍是使用utf-8的String數據類型,但在sqlite的API中,輸入字符串參數均爲char*,直接使用String是編譯通不過的,在csdn,谷哥,度娘等搜索,不知道是關鍵字沒設置好仍是什麼,說的都不得要領,後來找到有人會寫一段程序,用逐個字符翻譯的方式轉換,我心不甘,因而試了幾天,試出一個更加簡便的方式,列出給各位。

    我使用的編譯器是RAD XE, Sqlite版本3.7.9, 數據庫管理器是sqlite expert 3.3.52。

    直接使用字符串,因爲編譯爲GBK,致使管理器瀏覽出來是亂碼。

    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 );  


    而當使用String類型,在以下轉換後, 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類型再轉' );";"
    strRaw      = UTF8Encode(strUtf8);
    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格式顯示中文成功。

    這裏的關鍵是,把String類型utf-8,使用UTF8Encode系統函數,轉換成RawByteString,而後使用RawByteString類型的成員函數c_str(),可轉換成char*類型,而內容是utf-8格式的,這樣在傳進sqlite api後,可正常做爲utf-8的內容。sql

相關文章
相關標籤/搜索