谈CString和std::string的相互转化,MFC用std::fstream中文路径和中文名

最后补一下,写的很清楚的一个博客。很好很好啊。

http://blog.csdn.net/dbzhang800/article/details/7540905


之前一直是玩一些单片机之类的东西,现在转MFC大概一个月,断断续续补充了一些知识。作为一个新手,有时候学习找不到合适的资料真是痛苦……

CString和string的转换真是比较坑啊,现在终于搞清楚了该怎么办,为帮助跟我一样的新手,决定厚着脸皮开通博客,仔细解释一下这个东西。

 之前baidu google, 各个博客的解释都大同小异,没有详细介绍编码和字符集的概念,所以感觉搞得一塌糊涂。幸亏之前搞单片机底层好多,编码和字符集接触了一些。虽然没仔细整理过,好歹有个概念,现在才终于从泥潭里脱离出来。

下面介绍方法!!

1、仔细地看一下下面的简介,具体点的也可以维基百科

引用博客:http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html

维基百科:http://zh.wikipedia.org/wiki/%E5%AD%97%E7%AC%A6%E9%9B%86

请仔细阅读关于Unicode的内容,主要是UTF-8UTF-16

MFC在Unicode模式下用的是UTF-16,两字节的,而std::string是默认UTF-8的

 

如果换一种叫多字节字符集(MCBS)的,则需要

 

MFC之前版本VC6.0中好像是默认这个的,但现在的版本好像都默认是Unicode的。

而资料博客什么的都比较老了,所以比较坑。

 

现在,首先介绍unicode模式下的CString与std::string相互转,我认为最根本的就是把UTF-16转成UTF-8,反之亦然。

个人认为最简单的一种方法:CStringA()这个强制类型转换很好用

这样就可以把UNICODE版本字符串转换为Ansi版本了,非常之强大,非常之方便!

源自于:http://blog.csdn.net/password318/article/details/7003979

然后直接用

std::string strs = CStringA(MFCstring);

就好了。

 

从string到unicode下的CString,这个就用CStringW

MFCstring = CStringW(stdstring.c_str());

 

另一种方法就是将项目属性设置里设置成第二个图,用多字节字符集(MCBS)就可以直接在CStringstd::string之间相互转了,网上好多老的方法就都能用了。我就不再赘述


 另附图一张,在unicode模式下试验的。应该一目了然了吧。MFC的工程,不知道怎么在控制台上同时输出结果,求指教……直接看这个好了。。。W开头是CStringW宽字符,A开头是CStringA多字节形式,C开头是CString。另(CStringW(string)到底是什么?是叫构造函数?还是叫啥来着?求解答)



补充一下,用fstream时需要用宽字符的utf-16的编码才行。所以直接用fstream iofile(_TEXT("。。。。"))就好了。


第一次写博客,希望大神么指正~

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值