zoukankan      html  css  js  c++  java
  • c++中sqlite中文路径创建数据库失败的问题

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

    //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{}
        
  • 相关阅读:
    一则浏览器兼容性解决案例(搜狗)
    使用sass命令行,包含bourbon,neat包的项目
    指针例1
    数学建模四0-1规划
    数学建模3
    数学建模2.生产计划
    复数的实现1.3
    多文件操作1.2.5
    函数及参数类型1.2.4
    指针类型1.2.3
  • 原文地址:https://www.cnblogs.com/just-bg/p/3896806.html
Copyright © 2011-2022 走看看