VS GBK编码和UTF-8编码转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS GBK编码和UTF-8编码转换相关的知识,希望对你有一定的参考价值。

#include <Windows.h>


// 注释:多字节包括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;

}


以上是关于VS GBK编码和UTF-8编码转换的主要内容,如果未能解决你的问题,请参考以下文章

UTF-8和GBK编码转换(QT版本)

python入门:UTF-8转换成GBK编码

utf-8编码的页面如何转成gbk编码的页面(急)

oracle编码gbk加载utf-8文件需要转码么?

如何把utf-8编码的转换为gb2312

一.编码的转换