下面是GBK与UTF8互转的C++实现,
/******************************************************************************
* FUNCTION: Gbk2utf8
* DESCRIPTION: 实现由gbk编码到utf8编码的转换
*
* Input: utfStr,转换后的字符串; srcStr,待转换的字符串;
* Output: utfStr
* Returns: -1,fail;>0,success
*
* --------------------
* Author : Fly@BD
* --------------------
******************************************************************************/
bool Gbk2utf8(string &utfStr, string &srcStr)
{
//首先先将gbk编码转换为unicode编码
if(NULL==setlocale(LC_ALL,"zh_CN.gbk"))//设置转换为unicode前的码,当前为gbk编码
{
printf("Bad Parameter\n");
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 Parameter\n");
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;
}
/******************************************************************************
* FUNCTION: Utf82gbk
* DESCRIPTION: 实现由utf8编码到gbk编码的转换
*
* Input: utfStr,转换后的字符串; srcStr,待转换的字符串;
* Output: utfStr
* Returns: -1,fail;>0,success
*
* --------------------
* Author : Fly@BD
* --------------------
******************************************************************************/
bool Utf82gbk(std::string &gbkStr, std::string &srcStr)
{
//首先先将utf-8编码转换为unicode编码
if(NULL==setlocale(LC_ALL,"zh_CN.utf8"))//设置转换为unicode前的码,当前为utf8编码
{
printf("Bad Parameter\n");
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 Parameter\n");
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;
}