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

  • 相关阅读:
    ios代码大全
    MYSQL数据库之如何在已经建立好表之后重构数据表
    关于cookie在一个页面设置但是在另外一个页面获取不到的原因
    cookie的那点事儿
    关于a标签不能调用js方法的小细节,你注意到了么?
    关于mysql预处理技术的一点小心得
    关于delete使用limit的一些注意事项
    DP1 等分连续1-N个数的划分种数
    Spring 编程式事务和声明式事务管理
    java https client信任所有证书
  • 原文地址:https://www.cnblogs.com/kex1n/p/2224127.html
Copyright © 2011-2022 走看看