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 _UNICODE
const 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里面保存的字符串,是如何定义的字段属性,从这里查起。

参考技术A 首先确定你mysql的数据是不是utf-8编码,然后看你写程序的时候是不是使用了unicode编码

以上是关于vc中文显示乱码的主要内容,如果未能解决你的问题,请参考以下文章

vc中如何在对话框上显示图片

vc6开发环境由MBCS改成UNICODE

如何在vc++ 对话框中显示文字

linux显示中文乱码

git status 显示中文和解决中文乱码

LINUX SSH显示中文乱码,如何解决?