vs2010 MFC 工程为多字节工程,非UNICODE。 提取sqlite数据中文为乱码
vs2010 MFC 工程为多字节工程,非UNICODE。 提取sqlite数据中文为乱码。
具体是这样的,使用sqlite expert personal 工具 在其工具栏里边设置 EnCoding 为Unicode (UTF-8)模式,测试时,我手动在表字段s下添加中文数据。显示正常。
然后我用程序去读取该字段数据,取出数据中文 部分为乱码。
网上说需要转换,我做了 还是不行。
以下是我转换代码:
BOOL ConvetDbStr(LPCWSTR lpcwszStr, LPSTR lpszStr, DWORD dwSize)
{
DWORD dwMinSize;
dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
if(dwSize < dwMinSize)
{
return FALSE;
}
WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,lpszStr,dwSize,NULL,FALSE);
return TRUE;
}
然后调用该函数进行转化,如下:
以下部分azResult[i] 为从数据库取出的 对应中文字段的数据。其定义:char **azResult;
查表部分为:
sql="select * from SENIOR_VIEW";
sqlite3_get_table(db,sql,&azResult,&nrow,&ncolumn,&zErrMsg);
由于工程是多字节非UNICODE,所以先将char* 转化为LPCWSTR 用于传入参数:
USES_CONVERSION;
LPCWSTR pw = T2W(azResult[i]);
转化:
char sText[50]= {0};
ConvetDbStr(pw,sText,sizeof(sText)/sizeof(sText[0]));
然后看到内容还是乱码。
由于小弟菜鸟,求高手指点一二。拜托!
外加一句:我存中文数据时 怎么办?能解答详细一点么?非常感谢!!!
已经解决了,
代码如下
wstring CDBCommData::UTF8ToUnicode( const string& str )
{
int len = 0;
len = str.length();
int unicodeLen = ::MultiByteToWideChar( CP_UTF8,
0,
str.c_str(),
-1,
NULL,
0 );
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
::MultiByteToWideChar( CP_UTF8,
0,
str.c_str(),
-1,
(LPWSTR)pUnicode,
unicodeLen );
wstring rt;
rt = ( wchar_t* )pUnicode;
delete pUnicode;
return rt;
}