• 封装ANSI,UNICODE,UTF8互相转换类


    Ansi22Utf8.h
    
    #pragma once
    
    #include <string>
    #include <vector>
    using namespace std;
    
    class Ansi22Utf8
    {
    public:
    	Ansi22Utf8(void);
    	~Ansi22Utf8(void);
    
    private:
    	wchar_t* AnsiToUnicode(const char* buf);
    	char* UnicodeToUtf8(const wchar_t* buf);
    
    	wchar_t * UTF8ToUnicode( const char* str );
    	char * UnicodeToANSI( const wchar_t *str );
    
    public:
    	char* UTF8ToANSI(const char* buf);
    	char* AnsiToUtf8(const char* buf);
    };
    
    
    Ansi22Utf8.cpp
    
    #include "StdAfx.h"
    #include "Ansi22Utf8.h"
    #include <Windows.h>
    
    Ansi22Utf8::Ansi22Utf8(void)
    {
    }
    
    
    Ansi22Utf8::~Ansi22Utf8(void)
    {
    }
    
    //UTF8转成Unicode
    wchar_t * Ansi22Utf8::UTF8ToUnicode( const char* str )
    {
          int    textlen = 0;
          wchar_t * result;
          textlen = MultiByteToWideChar( CP_UTF8, 0, str,-1,    NULL,0 );  
          result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));  
          memset(result,0,(textlen+1)*sizeof(wchar_t));  
          MultiByteToWideChar(CP_UTF8, 0,str,-1,(LPWSTR)result,textlen );  
          return    result;  
    }
    
    //Unicode转成ANSI
    char * Ansi22Utf8::UnicodeToANSI( const wchar_t *str )
    {
          char * result;
          int textlen = 0;
          // wide char to multi char
          textlen = WideCharToMultiByte( CP_ACP,    0,    str,    -1,    NULL, 0, NULL, NULL );
          result =(char *)malloc((textlen+1)*sizeof(char));
          memset( result, 0, sizeof(char) * ( textlen + 1 ) );
          WideCharToMultiByte( CP_ACP, 0, str, -1, result, textlen, NULL, NULL );
          return result;
    }
    
    char* Ansi22Utf8::UTF8ToANSI(const char* buf)
    {
    	return UnicodeToANSI(UTF8ToUnicode(buf));
    }
    
    //ANSI转成Unicode
    wchar_t* Ansi22Utf8::AnsiToUnicode(const char* buf)
    {
    	int textlen = 0;
    
    	wchar_t* result;
    
    	textlen = MultiByteToWideChar(CP_ACP,0,buf,-1,NULL,0);
    	
    	result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));
    	
    	memset(result,0,(textlen+1)*sizeof(wchar_t));
    	
    	MultiByteToWideChar(CP_ACP, 0,buf,-1,(LPWSTR)result,textlen );
    	
    	return result; 
    }
    	
    //Unicode转成UTF8
    char* Ansi22Utf8::UnicodeToUtf8(const wchar_t* buf)
    {
    	char* result;
    	
    	int textlen = 0;
    	
    	textlen = WideCharToMultiByte( CP_UTF8, 0, buf, -1, NULL, 0, NULL, NULL );
    	
    	result =(char *)malloc((textlen+1)*sizeof(char));
    	
    	memset(result, 0, sizeof(char) * ( textlen + 1 ) );
    	
    	WideCharToMultiByte( CP_UTF8, 0, buf, -1, result, textlen, NULL, NULL );
    	
    	return result; 
    }
    
    char* Ansi22Utf8::AnsiToUtf8(const char* szAnsi)
    {
    /*	 if (szAnsi == NULL)
            return NULL ;
        
        _bstr_t   bstrTmp (szAnsi) ;
        int       nLen = ::WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)bstrTmp, -1, NULL, 0, NULL, NULL) ;
        char      * pUTF8 = new char[nLen+1] ;
        ZeroMemory (pUTF8, nLen + 1) ;
        ::WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)bstrTmp, -1, pUTF8, nLen, NULL, NULL) ;
        return pUTF8 ;
    */
    
    	return UnicodeToUtf8(AnsiToUnicode(szAnsi));
    }
    
    
    
    
    

  • 相关阅读:
    Java反射
    浅谈page,request,session,application四种范围
    使用MySQL连接池
    SQL注入漏洞的演示及解决办法
    JDBC工具类的提取
    JDBC使用过程
    MYSQL常用函数
    MySQL数据操作
    MySQL存储引擎
    Python核心技术与实战——六|异常处理
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318459.html
Copyright © 2020-2023  润新知