vc中文显示乱码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc中文显示乱码相关的知识,希望对你有一定的参考价值。
在多字节字符集下,我从mysql 数据库中取出一列数据,然后将那列数据绑定到combobox,因为是中文的人名,所以显示的乱码的,请问怎么从多字节转换成宽字符?
result = mysql_store_result(con);
if(result!=NULL)
num_fields = mysql_num_rows(result);
//const int size = num_fields;
while ((row = mysql_fetch_row(result)))
for(int i = 0; i < num_fields; i++)
CString str;
char * charpoint ;
charpoint = row[i];
str = charpoint;//ANSIToUnicode(charpoint);
//str.Format(_"%u",str);
m_driver.AddString(str);
我是这么写的, 有人说用MultiByteToWideChar,能给一个具体的用法示例吗?谢谢!!
CString类支持编码转换,使用CString完全没有必要使用MultiByteToWideChar,因为这里面已经内置的转换了。
如果你的工程是UNICODE模式,那么str=charpoint的时候,转换就已经发生。如果不是,那么只要资源中指定中文字符集,那么显示多字节的中文也是没有问题的。
CString类的源码如下:
#ifdef _UNICODEconst CString& CString::operator=(LPCSTR lpsz)
int nSrcLen = lpsz != NULL ? lstrlenA(lpsz) : 0;
AllocBeforeWrite(nSrcLen);
_mbstowcsz(m_pchData, lpsz, nSrcLen+1);//这个就是MultiByteToWideChar
ReleaseBuffer();
return *this;
#else //!_UNICODE
const CString& CString::operator=(LPCWSTR lpsz)
int nSrcLen = lpsz != NULL ? wcslen(lpsz) : 0;
AllocBeforeWrite(nSrcLen*2);
_wcstombsz(m_pchData, lpsz, (nSrcLen*2)+1);
ReleaseBuffer();
return *this;
#endif //!_UNICODE
建议你,还是检查一下MYSQL里面保存的字符串,是如何定义的字段属性,从这里查起。
以上是关于vc中文显示乱码的主要内容,如果未能解决你的问题,请参考以下文章