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

  • 相关阅读:
    IIS 7.0 下 httpMoudle 失效的问题
    iis 管理员执行 aspnet_iis.exe
    java script 闭包
    c# 多语言实现 与 InitializeCulture
    谈 IIS7.5 Asp.Net模拟用户
    oledb 写入 office2010 以及发布到iis 遇到的奇怪问题总结
    DataTableToExcel
    下拉加载数据
    简单使用TFS管理源代码
    a span做成按钮样式不选中文字
  • 原文地址:https://www.cnblogs.com/kex1n/p/2224127.html
Copyright © 2011-2022 走看看