VSGBK编码和UTF-8编码转换

#include

成都网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站制作等服务项目。核心团队均拥有互联网行业多年经验,服务众多知名企业客户;涵盖的客户类型包括:成都柴油发电机等众多领域,积累了大量丰富的经验,同时也获得了客户的一致赞许!

// 注释:多字节包括GBK和UTF-8

int GBK2UTF8(char *szGbk,char *szUtf8,int Len)

{

    // 先将多字节GBK(CP_ACP或ANSI)转换成宽字符UTF-16

    // 得到转换后,所需要的内存字符数

    int n = MultiByteToWideChar(CP_ACP,0,szGbk,-1,NULL,0);

    // 字符数乘以 sizeof(WCHAR) 得到字节数

    WCHAR *str1 = new WCHAR[sizeof(WCHAR) * n];

    // 转换

    MultiByteToWideChar(CP_ACP,  // MultiByte的代码页Code Page

        0,            //附加标志,与音标有关

        szGbk,        // 输入的GBK字符串

        -1,           // 输入字符串长度,-1表示由函数内部计算

        str1,         // 输出

        n             // 输出所需分配的内存

        );

    // 再将宽字符(UTF-16)转换多字节(UTF-8)

    n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);

    if (n > Len)

    {

        delete[]str1;

        return -1;

    }

    WideCharToMultiByte(CP_UTF8, 0, str1, -1, szUtf8, n, NULL, NULL);

    delete[]str1;

    str1 = NULL;

    return 0;

}

//UTF-8 GBK

int UTF82GBK(char *szUtf8,char *szGbk,int Len)

{

    int n = MultiByteToWideChar(CP_UTF8, 0, szUtf8, -1, NULL, 0);

    WCHAR * wszGBK = new WCHAR[sizeof(WCHAR) * n];

    memset(wszGBK, 0, sizeof(WCHAR) * n);

    MultiByteToWideChar(CP_UTF8, 0,szUtf8,-1, wszGBK, n);

    n = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);

    if (n > Len)

    {

        delete[]wszGBK;

        return -1;

    }

    WideCharToMultiByte(CP_ACP,0, wszGBK, -1, szGbk, n, NULL, NULL);

    delete[]wszGBK;

    wszGBK = NULL;

    return 0;

}


标题名称:VSGBK编码和UTF-8编码转换
网站地址:http://azwzsj.com/article/jdpsco.html