c++中sqlite中文路径建立数据库失败的问题

   sqlite3里面使用的是utf-8的编码,因此在建立数据库的时候若果路径是纯英文字母和数字的话,那么多ansii和utf-8编码是同样的,这个时候sqlite3_open函数的调用彻底没问题。可是若是是中文的话asnsii直接转化为Utf-8就会出错, 找不到路径,从而建立或者打开数据库失败。解决的方法以下:sql

//sdk中能够直接从UNICODE转为utf-8,不能直接从ansii转为utf-8
//因此 Ansii要转为Utf-8, 须要先转为UNICODE 再转为utf-8
void 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{}
    
相关文章
相关标签/搜索