引用: 引用 3 楼 KevinCEC 的回复:
是中文问题UTF-8 与GB2312的编码不一样, 需要转换
网上搜索一下 GB2312_2_UTF8 有这么一个函数.
还有里面的内容也是的,如果是中文的话就要注意了.? 在本机上访问不会有问题,例如写入"中国" 读出来也是"中国"
如果是跨平台的话就要注意了. 例如XP下存放的"中国" 在wince读就要转换了. 道理同上.
void CceSqliteTestDlg::OnBnClickedButton1()
{
sqlite3* clDB;
TCHAR szExeFullPath[MAX_PATH];
GetModuleFileName(NULL,szExeFullPath,MAX_PATH);
CString strFileName = szExeFullPath;
int nStringCount;
nStringCount = strFileName.ReverseFind('\\');
if(nStringCount != -1)
{
strFileName = strFileName.Mid(0,nStringCount + 1);
}
CString strDBFile;
strDBFile.Format(_T("%s测试\\1234.db"),strFileName);
DWORD dwMinSize;
dwMinSize = WideCharToMultiByte(CP_ACP,NULL,strDBFile,-1,NULL,0,NULL,FALSE); //计算长度
char *bbb= new char[dwMinSize + 1];
memset(bbb,0,dwMinSize + 1);
WideCharToMultiByte(CP_OEMCP,NULL,strDBFile,-1,bbb,dwMinSize,NULL,FALSE);
char szPath[MAX_PATH];
CCodingConv::GB2312_2_UTF8(szPath,MAX_PATH,bbb,dwMinSize);
int rc = _sqlite3_open(szPath,&clDB);
if ( rc != SQLITE_OK )
{
ASSERT(FALSE);
return;
}
_sqlite3_close(clDB);
}
用CCodingConv::GB2312_2_UTF8转换后出现乱码,_sqlite3_open后数据库是打开了,但是不在“测试”目录下面呀!