VS2010 控件出现乱码的问题

来源:本站
导读:目前正在解读《VS2010 控件出现乱码的问题》的相关信息,《VS2010 控件出现乱码的问题》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《VS2010 控件出现乱码的问题》的详细说明。
简介:本文章是关于VS2010 控件显示CString类型的字符串,出现乱码的问题 。

在写基于对话框的程序,用到一个Button按钮,单击时,查询USB口接的设备,并在ComboBox控件里列出其描述符。

使用如下代码:

str.Format(("%s"), BufPtrs[u]); // str为CString 变量

m_device_list.AddString(str); // m_device_list为CComboBox 变量

编译提示错误:不能将参数 1 从“const char [3]”转换为“const wchar_t *。

查询资料得到结果:VS2010默认编码是Unicode,我将其改为多字节编码后,编译OK,运行也不出现乱码!但是,多字节编码已不推荐使用,应该是兼容性不好。

所以我将编码格式改为Unicode,看是否有其他方式可以解决?

代码修改为:

str.Format((_T("%s"), BufPtrs[u]); // str为CString 变量

m_device_list.AddString(str); // m_device_list为CComboBox 变量

编译OK,但运行后,str内容为乱码,导致显示也是乱码!

后来,在网上找到一个说法:unicode环境下格式化ansi字符串要用%S。

修改为:

str.Format((_T("%S"), BufPtrs[u]); // str为CString 变量

m_device_list.AddString(str); // m_device_list为CComboBox 变量

编译OK,运行OK,无乱码!

最后说明:

1)Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改,它固定使用16 bits(两个字节)来表示一个字符。_T("")与L"",效果是一样的。

如: L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。strlen("asd") = 3; strlen(L"asd") = 6;

2)关于 %s 与 %S

提醒:《VS2010 控件出现乱码的问题》最后刷新时间 2024-03-14 01:01:00,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《VS2010 控件出现乱码的问题》该内容的真实性请自行鉴别。