zoukankan      html  css  js  c++  java
  • 转载 ANSI、Unicode、UTF8相互转化的函数

    http://stdsoft.blogbus.com/logs/56468290.html

    static wstring ANSI2Unicode(const string & strin)
                {
                    wstring strout;

                    // 预计算所需空间大小(已包含结束字符),单位wchar_t
                    int dwNum = MultiByteToWideChar (CP_ACP, 0,strin.c_str(), -1, 0 , 0);
                    wchar_t * pBuffer = new wchar_t[dwNum];
                    if (!pBuffer)
                    {
                        return strout;
                    }
                    memset(pBuffer,0,(dwNum)*sizeof(wchar_t));

                    if(MultiByteToWideChar(CP_ACP, 0, strin.c_str(),-1,pBuffer,dwNum) >= 0)
                    {
                        strout = pBuffer;
                    }

                    delete[] pBuffer;
                    return strout;
                }

    static string  Unicode2UTF8(const wstring & strin)
                {
                    string strout;

                    //测试所需存储空间大小(已包含结束字符),单位char
                    int dwNum = WideCharToMultiByte(CP_UTF8,0,strin.c_str(),-1,0,0,0,0);
                    char* pBuffer = new char[dwNum];
                    if (!pBuffer)
                    {
                        return strout;
                    }
                    memset(pBuffer,0,dwNum);
                   
                    if(WideCharToMultiByte(CP_UTF8,0,strin.c_str(),-1,pBuffer,dwNum,0,0) >= 0)
                    {
                        strout = pBuffer;
                    }

                    delete[] pBuffer;
                    return strout;
                }

    static string  ANSI2UTF8(const string & strin)
                {
                    return Unicode2UTF8(ANSI2Unicode(strin));
                }

    static string  Unicode2ANSI(const wstring & strin)
                {
                    string strout;

                    //测试所需存储空间大小(已包含结束字符),单位char
                    int dwNum = WideCharToMultiByte(CP_ACP,0,strin.c_str(),-1,0,0,0,0);
                    char* pBuffer = new char[dwNum];
                    if (!pBuffer)
                    {
                        return strout;
                    }
                    memset(pBuffer,0,dwNum);

                    BOOL use_def_char = FALSE;
                    if(WideCharToMultiByte(CP_ACP,0,strin.c_str(),-1,pBuffer,dwNum,"?",&use_def_char) >= 0)
                    {
                        strout = pBuffer;
                    }

                    delete[] pBuffer;
                    return strout;
                }

    static wstring UTF82Unicode(const string & strin)
                {
                    wstring strout;

                    // 预计算所需空间大小(已包含结束字符),单位wchar_t
                    int dwNum = MultiByteToWideChar (CP_UTF8, 0,strin.c_str(), -1, 0 , 0);
                    wchar_t* pBuffer = new wchar_t[dwNum];
                    if (!pBuffer)
                    {
                        return strout;
                    }
                    memset(pBuffer,0,dwNum*sizeof(wchar_t));

                    if(MultiByteToWideChar(CP_UTF8,0,strin.c_str(),-1,pBuffer,dwNum) >= 0)
                    {
                        strout = pBuffer;
                    }

                    delete[] pBuffer;
                    return strout;
                }

    static string  UTF82ANSI(const string & strin)
                {
                    return Unicode2ANSI(UTF82Unicode(strin));
                }

  • 相关阅读:
    《Linux C一站式学习》第七章 结构体
    《Linux C一站式学习》第三章 简单的函数
    《Windows程序设计》第一章 起步
    CSS在线课程学习笔记
    《Windows程序设计》第三章 窗口和消息
    window.open与window.showModalDialog中主页面与从页面间的通信(原创) 中庸
    php文件实现将大文件导入到mysql数据库中
    我为何爱读代码?你为何也应当爱?
    解决phpMyAdmin导入mysql数据库超过2M的问题
    对linux交换分区swap的一些认识总结
  • 原文地址:https://www.cnblogs.com/kex1n/p/2224127.html
Copyright © 2011-2022 走看看