下面是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; }