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  * --------------------   ******************************************************************************/
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; }