zoukankan      html  css  js  c++  java
  • VC++ utf8 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;        
        }  
  • 相关阅读:
    如何修补软件、系统漏洞?
    轻松学习Linux之本地安装系统
    看程序体验缓冲区溢出漏洞
    企业网管软件实战之SolarWinds LANsurveyor
    Android项目开发遇到的问题(64K的错误)的解决之路,从入坑到出坑
    史上最佳 Mac+PhpStorm+XAMPP+Xdebug 集成开发和断点调试环境的配置
    [noip2011]计算系数+二项式定理证明
    [nowcoder5668H]Sort the Strings Revision
    (动态规划)导弹防御
    nyoj 79 拦截导弹
  • 原文地址:https://www.cnblogs.com/ytjjyy/p/2631657.html
Copyright © 2011-2022 走看看