毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 开发语言 >> 正文

vs2010 MFC 工程为多字节工程,非UNICODE。 提取sqlite数据中文为乱码

更新时间:2013-1-28:  来源:毕业论文

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; 
}

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。