vs2005下的编码转码

        习惯了linux c的编程,由于有个项目开发环境是windows,接触到了vc,一下子就懵了,在用vs2005开发的过程中,遇到的一个比较头疼的问题就是utf8和windows默认编码gbk(ANSI)相互转化的问题。在查阅了n多资料后,终于找了一个比较容易实现的方式。

         首先因为涉及到嵌入系统问题,所以使用了MFC。由此包含的头文件是<cstringt.h><winnls.h><atlstr.h>

ConvertUTF8ToANSI(char* strUTF8,CString &strANSI) //    
{    
 int nLen = ::MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,(LPCTSTR)strUTF8,-1,NULL,0);  
//返回需要的unicode长度    
 WCHAR * wszANSI = new WCHAR[nLen+1];    
 memset(wszANSI, 0, nLen * 2 + 2);    
 nLen = MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUTF8, -1, wszANSI, nLen);    //把utf8转成unicode   
 
 nLen = WideCharToMultiByte(CP_ACP, 0, wszANSI, -1, NULL, 0, NULL, NULL);        //得到要的ansi长度    
 char *szANSI=new char[nLen + 1];    
 memset(szANSI, 0, nLen + 1);    
 WideCharToMultiByte (CP_ACP, 0, wszANSI, -1, szANSI, nLen, NULL,NULL);          //把unicode转成ansi    
 strANSI = szANSI;    
 delete wszANSI;    
 delete szANSI;    
}

 

Ansi2UTF8(CString &text)
{
     // first convert ansi to unicode
     DWORD LenUni = MultiByteToWideChar(GetACP(),0,text,-1,NULL,0);
     wchar_t *uniStr = new wchar_t[LenUni];
     MultiByteToWideChar(CP_ACP,0,text,-1,uniStr,LenUni);
     
     // then convert unicode to UTF8
     DWORD LenUTF8 = WideCharToMultiByte(CP_UTF8,0,uniStr,-1,NULL,0,NULL,NULL);
     char *utf8Str = new char[LenUTF8];
     WideCharToMultiByte(CP_UTF8,0,uniStr,-1,utf8Str,LenUTF8,NULL,NULL);
     text = (LPCTSTR)utf8Str;
}

 

CString就相当于linux c里的const char*吧

CString可由string.c_str()来转化

string可由CString.GetBuffer(0)来转化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值