概述
#include <locale.h> //setlocale使用
#include <stdlib.h>//linux下mbsowcs(),wcstombs()使用
bool Gbk2utf8(string &utfStr, string &srcStr)
{
//首先先将gbk编码转换为unicode编码
if(NULL==setlocale(LC_ALL,"zh_CN.gbk"))//设置转换为unicode前的码,当前为gbk编码
{
printf("Bad Parametern");
return false;
}
int unicodeLen=mbstowcs(NULL,srcStr.c_str(),0);//计算转换后的长度
if(unicodeLen<=0)
{
printf("Can not Transfer!!!n");
return false;
}
wchar_t *unicodeStr=(wchar_t *)calloc(sizeof(wchar_t),unicodeLen+1);
mbstowcs(unicodeStr,srcStr.c_str(),srcStr.size());//将gbk转换为unicode
//将unicode编码转换为utf8编码
if(NULL==setlocale(LC_ALL,"zh_CN.utf8"))//设置unicode转换后的码,当前为utf8
{
printf("Bad Parametern");
return false;
}
int utfLen=wcstombs(NULL,unicodeStr,0);//计算转换后的长度
if(utfLen<=0)
{
printf("Can not Transfer!!!n");
return false;
}
char utfbuf[utfLen];
wcstombs(utfbuf,unicodeStr,utfLen);
utfbuf[utfLen]=0;//添加结束符
free(unicodeStr);
utfStr = utfbuf;
return true;
}
bool Utf82gbk(std::string &gbkStr, std::string &srcStr)
{
//首先先将utf-8编码转换为unicode编码
if(NULL==setlocale(LC_ALL,"zh_CN.utf8"))//设置转换为unicode前的码,当前为utf8编码
{
printf("Bad Parametern");
return false;
}
int unicodeLen=mbstowcs(NULL,srcStr.c_str(),0);//计算转换后的长度
if(unicodeLen<=0)
{
printf("Can not Transfer!!!n");
return false;
}
wchar_t *unicodeStr=(wchar_t *)calloc(sizeof(wchar_t),unicodeLen+1);
mbstowcs(unicodeStr,srcStr.c_str(),srcStr.size());//将gbk转换为unicode
//将unicode编码转换为gbk编码
if(NULL==setlocale(LC_ALL,"zh_CN.gbk"))//设置unicode转换后的码,当前为gbk
{
printf("Bad Parametern");
return false;
}
int gbkLen=wcstombs(NULL,unicodeStr,0);//计算转换后的长度
if(gbkLen<=0)
{
printf("Can not Transfer!!!n");
return false;
}
char gbkbuf[gbkLen];
wcstombs(gbkbuf,unicodeStr,gbkLen);
gbkbuf[gbkLen]=0;//添加结束符
gbkStr = gbkbuf;
free(unicodeStr);
return true;
}
最后
以上就是高挑硬币为你收集整理的GBK与UTF8互转的全部内容,希望文章能够帮你解决GBK与UTF8互转所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复