您的位置:首页 > 编程语言 > C语言/C++

C++ MFC string转Cstring为什么会乱码

2014-10-27 13:22 260 查看
前段时间学习mfc编了一个小程序,其中涉及到CString 与string的转换的时候感觉特别蛋疼,因此再此总结一下经验。希望能够对大家能有所帮助

通常有两种字符集模式 unicode字符集 和 ascii字符集,其中unicode有多种编码方式。utf8, utf16和utf32,还有 utf7, 再其中。utf8 和ascii编码兼容, 但是使用两个以上的字节存储中文等。 wstring实际上用的是宽字符。所有的字符都用两个字节存储(windows)。

stringg -> CString

通常的方法是

CString.format("%s", string.c_str());

但是 :

在vs2010 的情况下,是结果运行出来的是乱码,原因是CString.Format把string的每两个char当作一个wchar进行了转换,结果会是一串乱码。

网上各种大神们主要给出来以下几种解决方案

1.直接把设置改为多字符集即是项目->(项目)属性->配置属性->常规..里面有个字符集..字符集选成使用多字节字符集...(我用的是vs2010)这样直接跳过了字符转换,使用asci编码。如果不想费心的话可以这样试试

2. 在不修改字符集的情况下,Unicode编码使用用wstring,wcstring,wchar 推荐使用这样,因为unicode的界面明显美观且更为通用

3.使用MultiByteToWideChar函数,有关这个函数的说明可以去msdn上面去搜索

4.还有一种是ms提供的一种解决方法

ATL 7.0 中引入了相应的宏,建议自己去阅读msdn中相应的类容

CA2T szr(s.c_str());

CString = (LPCTSTR)szr;//(LPCTSTR)为强制类型转换

网上有人说这种方法不安全,主要是作用域的问题,具体我也不太明白

cstring to string

vs2010 Unicode下:

CStringW str(L"test");

CStringA stra(str.GetBuffer(0));

str.ReleaseBuffer();

std::string strs (stra.GetBuffer(0));

stra.ReleaseBuffer();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: