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{}
相关文章推荐
- sqlite打开路径含中文的数据库文件失败的问题
- SQLite 数据库创建后,DB文件路径问题
- 关于CppSqlite中数据库文件中文路径识别问题的解决方法
- 关于CppSqlite中数据库文件中文路径识别问题的解决法
- sqlite中文路径问题
- Sqlite中文路径问题
- 关于std::fstream以及std::ifstream打开中文路径名失败的问题和解决方法
- 解决vs2010“创建或打开C++浏览数据库文件 发生错误”的问题 Microsoft SQL Server Compact 3.5
- 解决vs2010“创建或打开C++浏览数据库文件 发生错误”的问题"
- vs2012创建或打开浏览数据库文件.sdf文件失败,intellisense不能用于c++项目,F12 不能跳转到定义处
- [C++]fstream与中文路径的问题
- 解决vs2010“创建或打开C++浏览数据库文件 发生错误”的问题"
- 解决SQL Server2005创建数据库失败的问题Collation '<服务器默认值>' is not valid.
- ifstream VS2005 中文路径打开失败问题
- ifstream打开含中文路径文件时失败的问题
- 关于std::fstream以及std::ifstream打开中文路径名失败的问题和解决方法
- sqlite3问题2:中文路径的支持
- VC中ifstream中文路径读取失败的问题
- 解决Sqlite中的中文路径问题
- 解决vs2010“创建或打开C++浏览数据库文件 发生错误”的问题 Microsoft SQL Server Compact 3.5