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();

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值