码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-12-09 01:46:11      阅读:617      评论:0      收藏:0      [点我收藏+]

标签: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编码转换

标签:gbk utf-8

原文地址:http://fengyuzaitu.blog.51cto.com/5218690/1880698

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!