posts - 225, comments - 62, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
wchar_t * ANSIToUnicode( const char* str )
{
      
int    textlen ;
      wchar_t 
* result;
      textlen 
= MultiByteToWideChar( CP_ACP, 0, str,-1,    NULL,0 );  
      result 
= (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));  
      memset(result,
0,(textlen+1)*sizeof(wchar_t));  
      MultiByteToWideChar(CP_ACP, 
0,str,-1,(LPWSTR)result,textlen );  
      
return    result;  
}

char * UnicodeToANSI( const wchar_t *str )
{
      
char * result;
      
int textlen;
      
// 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, 
0sizeof(char* ( textlen + 1 ) );
      WideCharToMultiByte( CP_ACP, 
0, str, -1, result, textlen, NULL, NULL );
      
return result;
}

wchar_t 
* UTF8ToUnicode( const char* str )
{
      
int    textlen ;
      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;  
}

char * UnicodeToUTF8( const wchar_t *str )
{
      
char * result;
      
int textlen;
      
// wide char to multi char
      textlen = WideCharToMultiByte( CP_UTF8,    0,    str,    -1,    NULL, 0, NULL, NULL );
      result 
=(char *)malloc((textlen+1)*sizeof(char));
      memset(result, 
0sizeof(char* ( textlen + 1 ) );
      WideCharToMultiByte( CP_UTF8, 
0, str, -1, result, textlen, NULL, NULL );
      
return result;
}

 

Feedback

# re: 字符编码转换(ANSI Unicode UTF-8)  回复  更多评论   

2010-03-05 20:32 by xueyouchao
MultiByteToWideChar this function is windows only,
you should find ISO C++ standard functions to do the job
只有注册用户登录后才能发表评论。