GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312

关于Unicode、UTF8,GBK(GB2312) 的介绍见:

UTF-8 、UTF-16、GBK(GB2312)和Unicode_小飞侠hello的博客-CSDN博客

windows下提供了两个编码转换函数:WideCharToMultiByte和MultiByteToWideChar。
用它们可实现Unicode(UCS2),UTF8,GBK(GB2312)互转。

int
WINAPI
MultiByteToWideChar(
    __in UINT     CodePage,
    __in DWORD    dwFlags,
    __in_bcount(cbMultiByte) LPCSTR   lpMultiByteStr,
    __in int      cbMultiByte,
    __out_ecount_opt(cchWideChar) __transfer(lpMultiByteStr) LPWSTR  lpWideCharStr,
    __in int      cchWideChar);
 
int
WINAPI
WideCharToMultiByte(
    __in UINT     CodePage,
    __in DWORD    dwFlags,
    __in_ecount(cchWideChar) LPCWSTR  lpWideCharStr,
    __in int      cchWideChar,
    __out_bcount_opt(cbMultiByte) __transfer(lpWideCharStr) LPSTR   lpMultiByteStr,
    __in int      cbMultiByte,
    __in_opt LPCSTR   lpDefaultChar,
    __out_opt LPBOOL  lpUsedDefaultChar);

第一个参数,CodePage,通常取两个值:
1、CP_UTF8,将UTF8转换成Unicode的时使用。
2、CP_ACP,Ansi Code Page,也就是计算机本地的代码页,中国大陆为936(简体中文),也就是GetACP()的返回值。Unicode转换成GBK相互转换时使用。

UTF8 转换成GBK2312

char* UtfToGbk(const char* utf8);

char* CWininetHttp::UtfToGbk(const char* utf8)
{
    int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
    wchar_t* wstr = new wchar_t[len + 1];
    memset(wstr, 0, len + 1);
    MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
    len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
    char* str = new char[len + 1];
    memset(str, 0, len + 1);
    WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
    if (wstr) delete[] wstr;
    return str;
}

gb2312_to_utf8

string gb2312_to_utf8(const char* gb2312)
    {
        int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
        wchar_t* wstr = new wchar_t[len + 1];
        memset(wstr, 0, len + 1);
        MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
        len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
        char* str = new char[len + 1];
        memset(str, 0, len + 1);
        WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
        string strTemp = str;
        if (wstr)
            delete[] wstr;
        if (str)
            delete[] str;
 
        return strTemp;

}

Windows下,Unicode、UTF8,GBK(GB2312)互转相关推荐

  1. java ucs2转utf8_Windows下Unicode(UCS2),UTF8,GBK(GB2312)互转

    Windows下提供了两个编码转换函数:WideCharToMultiByte和MultiByteToWideChar. 用它们可实现Unicode(UCS2),UTF8,GBK(GB2312)互转. ...

  2. ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别

    ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别 最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总 结网上一些朋友提供的 asc ...

  3. 计算机ucs汉字编码,字符编码基础知识 - Unicode,UCS,GBK,GB2312,UTF-8

    字符编码基础知识- Unicode,UCS,GBK,GB2312,UTF-8 最近遇到一个Unicode和UTF-8关系比较的问题,之前在处理中文显示时也遇到过类似的问题,于是花时间学习了一下,在此做 ...

  4. 字符在utf-8,gbk,gb2312,iso8859-1下的编码实验

    一直以来对编码并不是太理解,所以用java做了个实验,感觉清楚了点: 下面这个代码的功能是,获取某个字符或汉字在utf-8,gbk,gb2312,iso8859-1等下的十六进制,八进制,十进制,二进 ...

  5. 字符编码详解及由来(UNICODE,UTF-8,GBK)

    字符编码详解及由来(UNICODE,UTF-8,GBK) 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK) - 2009-01-29 09:53     一直对 ...

  6. VB 实现UTF-8 与GB2312互转

    模块代码如下: '* ************************************** * '* 模块名称:modCharset.bas '* 模块功能:GB2312与UTF8相互转换函数 ...

  7. utf-8,gbk,gb2312区别

    很多用户问GBK与UTF-8版本有什么区别,这边作了个整理如下: KesionCMS的GBK版本与UTF-8版本功能是一样的.只不过编码方式不同. GBK的文字编码是双字节来表示的,即不论中.英文字符 ...

  8. UTF-8 GBK GB2312 之间的区别和关系

    UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三 ...

  9. Windows下打印utf-8文件

    估计入门时都会遇到的.我是在windows下用的Python25自带的IDLE编辑运行的,发现运行脚本得出的结果有一些中文显示是乱码,但有一些是 正常的.百思不得其解.首先查看了一下源文件的编码格式, ...

  10. ASP字符转换:UTF-8与GB2312互转

    UTF-8转GB2312函数 <% '用途:將UTF-8編碼漢字轉換為GB2312碼,兼容英文和數字 '版權:雖說是原創,其實也參考了別人的部分算法 '用法:Response.write UTF ...

最新文章

  1. [16] 螺旋面(Spire)图形的生成算法
  2. 如何网络推广教你如何网站排名“更上一层楼”?
  3. 多台服务器搭建Spark集群
  4. 大数据笔记(三十二)——SparkStreaming集成Kafka与Flume
  5. 一个月后的2016产品汪温馨提示
  6. b 树查找时间复杂度_你心里是没点B树吗?
  7. linux课堂笔记(7)
  8. InnoDB的Buffer Pool简介
  9. kotlin android 注解,注解 - Kotlin 语言中文站
  10. user32.dll 函数说明小结
  11. Marlin固件串口功能解析和程序移植
  12. 计算机显示网络无权限访问权限,小编教你电脑显示无internet访问权限怎么办
  13. 75---Python绘制动态狄拉克delta函数
  14. 关于网络性能的一些指标
  15. PS 图片部分位置调亮
  16. 【NOI模拟赛】黑色大桥(DP优化,李超树)
  17. java 实现文件内容的加密和解密
  18. 中国商用显示行业“十四五”前景规划及发展方向分析报告2022-2027年版
  19. 使用PIL将白底黑字图片转为透明底白字
  20. 如何判断时间是否在跨天的时间段之内

热门文章

  1. React Native填坑之旅--动画
  2. Fabric 1.0的多机部署
  3. SSM开发环境的搭建(方式二)
  4. rabbitMQ第四篇:远程调用
  5. Hibernate在自由状态和持久的状态转变
  6. Python学习笔记一(Python数据类型)
  7. 数据加密技术之加密算法
  8. 微服务架构实战篇(六):Spring boot2.x 集成阿里大鱼短信接口详解与Demo
  9. pandas之DataFrame
  10. abp后台任务BackGroundWorker