ANSI与UTF-8编码转换

将ANSI编码装换为UTF-8在windows MFC环境下测试下面的代码
static int ansi2utf8(IN const char *cSrc, OUT char *cDest)
{
 assert(NULL != cSrc && NULL != cDest);
 
 int hResult = SUCCESS;
 int nBufferLen = 0;

 

//MultiByteToWideChar
 nBufferLen = MultiByteToWideChar(CP_ACP, 0, cSrc, -1, NULL, 0);
 char *cTempBuffer = (char*)malloc(strlen(cSrc) * sizeof(WCHAR));
 memset(cTempBuffer, 0, nBufferLen);
 nBufferLen = MultiByteToWideChar(CP_ACP, 0, cSrc, -1, (LPWSTR)cTempBuffer, nBufferLen);

 

//WideCharToMultiByte    切勿想当然,参数个数与前一个函数不一样
 nBufferLen = WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)cTempBuffer, -1,
          NULL, 0, NULL, NULL);
 cDest = (char*)realloc(cDest, nBufferLen);
 memset(cDest, 0, nBufferLen);
 nBufferLen = WideCharToMultiByte(CP_UTF8, 0,(LPWSTR)cTempBuffer, -1,
          cDest, nBufferLen, NULL, NULL);
 
 if(0 != nBufferLen)
  hResult = SUCCESS;
 
 return hResult;
}

 

//以下代码将UTF-8 转换为gb2312

intutf8togb2312(const char *sourcebuf, size_t sourcelen, char *destbuf, size_tdestlen)

{

   iconv_t cd;

   if( (cd = iconv_open("utf-8", "gb2312")) == 0)     //查看相关函数,在Linux中使用locale -a命令查看字符集,转为其他字符集只  //需要改变该参数即可

   {

       return -1;

   }

 

   memset(destbuf,0,destlen);

   const char **source = &sourcebuf;

   char **dest = &destbuf;                          //想清楚,此处为什么要保存原始地址?

 

   //注意:该函数回改变指针,如source会累加,调试运行观察source指针。

   if((size_t)(-1) == iconv(cd, (char **)source, &sourcelen, dest,&destlen))

   {

       return -1;

   }

   iconv_close(cd);

 

   return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值