• Windows下简单的编码转换


    Windows下简单的编码转换

    /**********************************************************************************
    * Function    : WCharToChar
    * Description : wide char to muliple char
    ***********************************************************************************/
    int WCharToChar(UINT PageCode, std::wstring strWChar, std::string &strChar)
    {
            int nSize = WideCharToMultiByte(PageCode, 0, strWChar.c_str(), -1, NULL, 0, NULL, NULL);
            if( nSize <= 0 )
                    return -1;

            strChar.clear();
            int ret = 0;
            char *pszDest = new char[nSize+1];
            if( pszDest )
            {
                    memset( pszDest, 0, nSize+1 );
                    ret = WideCharToMultiByte(PageCode, 0, strWChar.c_str(), -1, pszDest, nSize, NULL, FALSE);
                    pszDest[nSize] = '\0';
                    strChar = pszDest;
            }
            SAFE_DELETE_ARRAY( pszDest );
            return ret;
    }

    int WCharToChar(std::wstring strWChar, std::string &strChar)
    {
            return WCharToChar( GetOEMCP(), strWChar, strChar );
    }

    /**********************************************************************************
    * Function    : CharToWChar
    * Description : muliple char to wide char
    ***********************************************************************************/
    int CharToWChar(UINT PageCode, std::string strChar, std::wstring &strWChar)
    {
            int nSize = MultiByteToWideChar(CP_ACP, 0, strChar.c_str(), -1, 0, 0);
            if( nSize <= 0 )
                    return -1;

            strWChar.clear();
            int ret = 0;
            wchar_t *pszDest = new wchar_t[nSize+1];
            if( pszDest )
            {
                    memset( pszDest, 0, nSize );
                    ret = MultiByteToWideChar(PageCode, 0, strChar.c_str(), -1, pszDest, nSize);
                    pszDest[nSize] = L'\0';
                    strWChar = pszDest;
            }
            SAFE_DELETE_ARRAY( pszDest );
            return ret;
    }

    int CharToWChar(std::string strChar, std::wstring &strWChar)
    {
            return CharToWChar( GetOEMCP(), strChar, strWChar );
    }

    /**********************************************************************************
    * Function : GB2312ToUtf8
    * Description : GB2312 to UTF-8
    ***********************************************************************************/
    int GB2312ToUtf8A( const char *pszGB2312, std::string &strUtf8 )
    {
            int ret = 0;
            std::wstring wGB2312;
            CharToWChar( CP_ACP, pszGB2312, wGB2312 );
            ret = WCharToChar( CP_UTF8, wGB2312, strUtf8 );
            return ret;
    }

    int GB2312ToUtf8W( const wchar_t *pszGB2312, std::string &strUtf8 )
    {
            int ret = 0;
            ret = WCharToChar( CP_UTF8, pszGB2312, strUtf8 );
            return ret;
    }

    /**********************************************************************************
    * Function : Utf8ToGB2312
    * Description : UTF-8 to GB2312
    ***********************************************************************************/
    int Utf8ToGB2312A( const char *pszUtf8, std::string &strGB2312 )
    {
            int ret = 0;
            std::wstring wUnicode;
            CharToWChar( CP_UTF8, pszUtf8, wUnicode );
            ret = WCharToChar( CP_ACP, wUnicode, strGB2312 );
            return ret;
    }

    int Utf8ToGB2312W( const char *pszUtf8, std::wstring &strGB2312 )
    {
            int ret = 0;
            ret = CharToWChar( CP_UTF8, pszUtf8, strGB2312 );
            return ret;
    }
  • 相关阅读:
    Windows10 下Apache服务器搭建
    Visual Studio 2019及其注册码
    清理300多台MySQL数据库的过期binlog日志
    JS获取和设置光标的位置
    在android客户端加载html源代码总结
    OpenGL ES2学习笔记(9)-- 转换矩阵
    可行性研究报告 之机房收费系统的可行性研究报告
    eclipse 配置Maven问题解决办法:新建maven工程时报错:Could not resolve archetype org.apache.maven.archetypes .
    常见的证书格式和相互转换
    九度OJ 题目1384:二维数组中的查找
  • 原文地址:https://www.cnblogs.com/changping/p/2030821.html
Copyright © 2020-2023  润新知