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;

}




    本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1880698,如需转载请自行联系原作者




相关文章
|
7月前
|
存储 编解码 C语言
ASCII、GBK与UTF-8的联系
ASCII、GBK与UTF-8的联系
96 1
|
2月前
|
自然语言处理
UTF-8编码的意义
UTF-8编码的意义
81 0
|
6月前
|
存储 自然语言处理 Java
UTF-8编码详解
UTF-8编码详解
|
存储 网络协议 安全
字符编码技术专题(一):快速理解ASCII、Unicode、GBK和UTF-8
今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料。 这个问题比我想象的复杂,午饭后一直看到晚上9点,才算初步搞清楚。 下面就是我的总结,主要用来整理自己的思路。我尽量写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的*石,对于程序员来说尤其重要,字符编码的知识是必须要懂的。
123 0
|
存储 自然语言处理 算法
UTF-8编码
通过阅读本篇文章,你可以了解到:UTF-8编码的规则。
362 0
UTF-8编码
|
存储 JavaScript 程序员
【字符编码详解】ASCII、GB2312、GBK、UTF-8、UTF-16编码与Unicode字符集
【字符编码详解】ASCII、GB2312、GBK、UTF-8、UTF-16编码与Unicode字符集
954 0
|
iOS开发
Unicode 与 UTF-8 编码的转换
Unicode 与 UTF-8 编码的转换
Unicode 与 UTF-8 编码的转换
|
存储 算法 Java
Java编码ASCII、GB2312、GBK、Unicode、UTF-8、UTF-16 编码方式详解
Java编码ASCII、GB2312、GBK、Unicode、UTF-8、UTF-16 编码方式详解
417 0
|
存储 关系型数据库 MySQL
关于UTF-8编码相关知识的简单介绍
关于UTF-8编码相关知识的简单介绍
178 0
|
Web App开发 JavaScript Java
编码问题 UTF-8 & GBK
记一次奇怪的编码问题。 * Meta Element vs Response Header * Meta 的作用? * 一个细节 * 细节对编码的影响 ## Meta Element vs Response Header 一个 GBK 编码页面,使用 meta 指定页面编码和使用 response header 指定页面编码。哪个优先级比较高? ###
2409 0