MBCS,UNICODE,UTF-8之間的轉換

1.  ANSI to Unicode

wstring ANSIToUnicode( const string& str )
{
	int  len = 0;
	len = str.length();
	int  unicodeLen = ::MultiByteToWideChar( CP_ACP,0,str.c_str(),-1,NULL,0 );  

	wchar_t *  pUnicode;  
	pUnicode = new  wchar_t[ unicodeLen + 1 ];  
	memset( pUnicode,0,( unicodeLen + 1 ) * sizeof( wchar_t ));  
	::MultiByteToWideChar( CP_ACP,0,str.c_str(),-1,(LPWSTR)pUnicode,unicodeLen );  
	
	wstring  rt;  
	rt = ( wchar_t* )pUnicode;
	delete  pUnicode; 

	return  rt;  
}

2.  Unicode to ANSI

string UnicodeToANSI( const wstring& str )
{
	char*     pElementText;
	int       iTextLen;
	
	iTextLen = WideCharToMultiByte( CP_ACP,0,str.c_str(),-1,NULL,0,NULL,NULL );
	pElementText = new char[ iTextLen + 1 ];
	memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
	::WideCharToMultiByte( CP_ACP,0,str.c_str(),-1,pElementText,iTextLen,NULL,NULL );
	
	string strText;
	strText = pElementText;
	delete[] pElementText;

	return strText;
}

3.  UTF-8 to Unicode

wstring UTF8ToUnicode( const string& str )
{
	int  len = 0;
	len = str.length();
	int  unicodeLen = ::MultiByteToWideChar( CP_UTF8,0,str.c_str(),-1,NULL,0 );  
	
	wchar_t *  pUnicode;  
	pUnicode = new  wchar_t[ unicodeLen + 1 ];  
	memset(pUnicode,0,(unicodeLen + 1) * sizeof(wchar_t));  
	
	::MultiByteToWideChar( CP_UTF8,0,str.c_str(),-1,(LPWSTR)pUnicode,unicodeLen );  
	
	wstring  rt;  
	rt = ( wchar_t* )pUnicode;
	delete  pUnicode; 

	return  rt;  
}

4.  Unicode to UTF-8

string UnicodeToUTF8( const wstring& str )
{
	char*     pElementText;
	int       iTextLen;
	
	iTextLen = WideCharToMultiByte( CP_UTF8,0,str.c_str(),-1,NULL,0,NULL,NULL );
	
	pElementText = new char[ iTextLen + 1 ];
	memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
	
	::WideCharToMultiByte( CP_UTF8,0,str.c_str(),-1,pElementText,iTextLen,NULL,NULL );
	
	string strText;
	strText = pElementText;
	delete[] pElementText;

	return strText;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章