GBKとUTF 8符号化相互回転のC++版
3059 ワード
以下、GBKとUTF 8の相互回転のC++実装、
/*****************************************************************************FUNCTION:Gbk 2 utf 8*DESCRIPTION:gbk符号化からutf 8符号化への変換を実現する**Input:utfStr、変換後の文字列;src Str、変換する文字列; * Output: utfStr * Returns: -1,fail;>0,success * * -------------------- * Author : Fly@BD * -------------------- ******************************************************************************/
/*****************************************************************************FUNCTION:Utf 82 gbk*DESCRIPTION:utf 8符号化からgbk符号化への変換を実現する**Input:utfStr、変換後の文字列;src Str、変換する文字列; * Output: utfStr * Returns: -1,fail;>0,success * * -------------------- * Author : Fly@BD * -------------------- ******************************************************************************/
/*****************************************************************************FUNCTION:Gbk 2 utf 8*DESCRIPTION:gbk符号化からutf 8符号化への変換を実現する**Input:utfStr、変換後の文字列;src Str、変換する文字列; * 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
");
return false;
}
int unicodeLen=mbstowcs(NULL,srcStr.c_str(),0);//
if(unicodeLen<=0)
{
printf("Can not Transfer!!!
");
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
");
return false;
}
int utfLen=wcstombs(NULL,unicodeStr,0);//
if(utfLen<=0)
{
printf("Can not Transfer!!!
");
return false;
}
char utfbuf[utfLen];
wcstombs(utfbuf,unicodeStr,utfLen);
utfbuf[utfLen]=0;//
free(unicodeStr);
utfStr = utfbuf;
return true;
}
/*****************************************************************************FUNCTION:Utf 82 gbk*DESCRIPTION:utf 8符号化からgbk符号化への変換を実現する**Input:utfStr、変換後の文字列;src Str、変換する文字列; * 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
");
return false;
}
int unicodeLen=mbstowcs(NULL,srcStr.c_str(),0);//
if(unicodeLen<=0)
{
printf("Can not Transfer!!!
");
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
");
return false;
}
int gbkLen=wcstombs(NULL,unicodeStr,0);//
if(gbkLen<=0)
{
printf("Can not Transfer!!!
");
return false;
}
char gbkbuf[gbkLen];
wcstombs(gbkbuf,unicodeStr,gbkLen);
gbkbuf[gbkLen]=0;//
gbkStr = gbkbuf;
free(unicodeStr);
return true;
}