標籤:des style blog color 使用 os 資料 art
sqlite3裡面使用的是utf-8的編碼,所以在建立資料庫的時候若果路徑是純英文字母和數位話,那麼多ansii和utf-8編碼是一樣的,這個時候sqlite3_open函數的調用完全沒問題。但是如果是中文的話asnsii直接轉化為Utf-8就會出錯, 找不到路徑,從而建立或者開啟資料庫失敗。解決的方法如下:
//sdk中可以直接從UNICODE轉為utf-8,不能直接從ansii轉為utf-8//所以 Ansii要轉為Utf-8, 需要先轉為UNICODE 再轉為utf-8void UnicodeToUtf8(char** dest , const WCHAR* src) {// ASSERT(dest!= NULL || src != NULL); int len = -1; len = WideCharToMultiByte(CP_UTF8, 0, src, -1, 0, 0, 0, 0)+1; *dest = new char[len+1]; ::WideCharToMultiByte(CP_UTF8, 0, src, -1,*dest, len, 0, 0); } void AnsiToUtf8(char** dest, const char* src) { // ASSERT(dest!= NULL || src != NULL); WCHAR* pwszStr = NULL; C2W(&pwszStr, src); UnicodeToUtf8(dest, pwszStr); SAFE_ARRYDELETE(pwszStr); }//建立\開啟資料庫 // szCreateTable="c:\\program files\\溜溜\\test.db" char* pszCreateSql = NULL; //沒有這句建立或者開啟失敗 AnsiToUtf8(&pszCreateSql, szCreateTable); /////////// if ( sqlite3_open(/*szCreateTable*/pszCreateSql, ppdb) != SQLITE_OK) { //開啟或者建立資料庫失敗 sqlite3_close(*ppdb); *ppdb = null; return DB_FAILED; } else{}