您的位置:首页 > 编程语言 > C语言/C++

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

2014-08-07 11:49 435 查看
   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{}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: