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));
                }

  • 相关阅读:
    二叉树计算叶子节点的计算问题
    操作系统中有关读者写者问题
    Java中关于CountDownLatch的使用
    Java中关于CyclicBarrier的使用
    将毫秒 换算成(天 时 分 秒 毫秒)
    数据库訪问技术之JDBC
    窥探开发人员与用户
    Cocos2d-x游戏开发之lua编辑器 Sublime 搭建,集成cocos2dLuaApi和自有类
    高速排序,归并排序,堆排序python实现
    svn 批量加入没有加入版本号控制的文件命令
  • 原文地址:https://www.cnblogs.com/kex1n/p/2224127.html
Copyright © 2011-2022 走看看