VC++ utf-8 Unicode GB2312 编码转换

    #include <iostream>  
    #include <string>  
    #include <Windows.h>  
    using namespace std;  
      
    void unicodeToUTF8(const wstring &src, string& result)  
    {  
        int n = WideCharToMultiByte( CP_UTF8, 0, src.c_str(), -1, 0, 0, 0, 0 );  
        result.resize(n);  
        ::WideCharToMultiByte( CP_UTF8, 0, src.c_str(), -1, (char*)result.c_str(), result.length(), 0, 0 );  
    }  
      
    void unicodeToGB2312(const wstring& wstr , string& result)  
    {  
        int n = WideCharToMultiByte( CP_ACP, 0, wstr.c_str(), -1, 0, 0, 0, 0 );  
        result.resize(n);  
        ::WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, (char*)result.c_str(), n, 0, 0 );  
    }  
      
    void utf8ToUnicode(const string& src, wstring& result)  
    {  
        int n = MultiByteToWideChar( CP_UTF8, 0, src.c_str(), -1, NULL, 0 );  
        result.resize(n);  
        ::MultiByteToWideChar( CP_UTF8, 0, src.c_str(), -1, (LPWSTR)result.c_str(), result.length());  
    }  
      
    void gb2312ToUnicode(const string& src, wstring& result)  
    {  
        int n = MultiByteToWideChar( CP_ACP, 0, src.c_str(), -1, NULL, 0 );  
        result.resize(n);  
        ::MultiByteToWideChar( CP_ACP, 0, src.c_str(), -1, (LPWSTR)result.c_str(), result.length());  
    }  
      
    void printByte(string str)  
    {  
        int i=0;  
        for (i=0; i<str.length(); i++)  
        {  
            printf("%02X ",(unsigned char)str.at(i));  
        }  
        printf("/n");  
    }  
      
    void wprintByte(wstring str)  
    {  
        int i=0;  
        for (i=0; i<str.length()*sizeof(wchar_t); i++)  
        {  
            printf("%02X ",*((unsigned char*)str.c_str()+i));  
        }  
        printf("/n");  
    }  
      
    int main()  
    {  
        string strText = "AB汉字";  
        string strUTF8;  
        wstring wstrUnicode;  
        string strGB2312;  
      
        printf("ANSI   =%s/n",strText.c_str());  
      
        gb2312ToUnicode(strText, wstrUnicode);  
        printf("Unicode=");  
        wprintByte(wstrUnicode);  
      
        unicodeToUTF8(wstrUnicode, strUTF8);  
        printf("UTF-8  =");  
        printByte(strUTF8);  
          
        utf8ToUnicode(strUTF8,wstrUnicode);  
        printf("Unicode=");  
        wprintByte(wstrUnicode);  
          
        unicodeToGB2312(wstrUnicode,strGB2312);  
        printf("GB2312 =");  
        printByte(strGB2312);  
      
        return 0;        
    }  
posted @ 2012-08-10 12:26  大约  阅读(634)  评论(1编辑  收藏  举报