打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

     前段时间学习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();

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MFC中 CSting与std::string互相转换
Unicode 和多字节字符集 (MBCS) 支持
字符,字节和编码
JSP中文乱码问题解决方法详解
Tomcat关于encoding编码的默认设置以及乱码产生的原因
struts原理与实践(4)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服