3,055
社区成员
发帖
与我相关
我的任务
分享
class CTranslateUTF8
{
public:
CTranslateUTF8(void);
~CTranslateUTF8(void);
static BOOL AsciiToUnicode(LPWSTR strDes,int &iDesSize,LPCSTR strSrc);
static BOOL UnicodeToAscii(LPSTR strDes,int &iDesSize,LPCWSTR strSrc);
static BOOL UnicodeToUtf8(LPSTR strDes,int &iDesSize,LPCWSTR strSrc);
static BOOL Utf8ToUnicode(LPWSTR strDes,int &iDesSize,LPCSTR strSrc);
static BOOL AsciiToUtf8(LPSTR strDes,int &iDesSize,LPCSTR strSrc);
static BOOL Utf8ToAscii(LPSTR strDes,int &iDesSize,LPCSTR strSrc);
static BOOL Utf8ToTstr(LPTSTR strDes,int &iDesSize,LPCSTR strSrc);
static BOOL TstrToUtf8(LPSTR strDes,int &iDesSize,LPCTSTR strSrc);
static BOOL TstrToUnicode(LPWSTR strDes,int &iDesSize,LPCTSTR strSrc);
static BOOL TstrToAscii(LPSTR strDes,int &iDesSize,LPCTSTR strSrc);
static BOOL AsciiToTstr(LPTSTR strDes,int &iDesSize,LPCSTR strSrc);
};
#include "StdAfx.h"
#include "TranslateUTF8.h"
CTranslateUTF8::CTranslateUTF8(void)
{
}
CTranslateUTF8::~CTranslateUTF8(void)
{
}
BOOL CTranslateUTF8::UnicodeToAscii(LPSTR strDes,int &iDesSize,LPCWSTR strSrc)
{
char* pElementText=NULL;
int iTextLen=0;
// wide char to multi char
iTextLen = WideCharToMultiByte( CP_ACP,
0,
strSrc,
-1,
NULL,
0,
NULL,
NULL );
if(iDesSize<iTextLen+2)
{
iDesSize=iTextLen+2;
return FALSE;
}
pElementText = new char[iTextLen + 1];
memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
::WideCharToMultiByte( CP_ACP,
0,
strSrc,
-1,
pElementText,
iTextLen,
NULL,
NULL );
memcpy(strDes,pElementText,iTextLen);
delete[] pElementText;
return TRUE;
}
BOOL CTranslateUTF8::AsciiToUnicode(LPWSTR strDes,int &iDesSize,LPCSTR strSrc)
{
//int len = 0;
//len = strlen(strSrc);
int unicodeLen = ::MultiByteToWideChar( CP_ACP,
0,
strSrc,
-1,
NULL,
0 );
if(iDesSize<unicodeLen+2)
{
iDesSize=unicodeLen+2;
return FALSE;
}
wchar_t * pUnicode=NULL;
pUnicode = new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
::MultiByteToWideChar( CP_ACP,
0,
strSrc,
-1,
(LPWSTR)pUnicode,
unicodeLen );
memcpy(strDes,pUnicode,unicodeLen*2);
delete [] pUnicode;
return TRUE;
}
BOOL CTranslateUTF8::UnicodeToUtf8(LPSTR strDes,int &iDesSize,LPCWSTR strSrc)
{
char* pElementText=NULL;
int iTextLen=0;
// wide char to multi char
iTextLen = WideCharToMultiByte( CP_UTF8,
0,
strSrc,
-1,
NULL,
0,
NULL,
NULL );
if(iDesSize<iTextLen+2)
{
iDesSize=iTextLen+2;
return FALSE;
}
pElementText = new char[iTextLen + 1];
memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
::WideCharToMultiByte( CP_UTF8,
0,
strSrc,
-1,
pElementText,
iTextLen,
NULL,
NULL );
memcpy(strDes,pElementText,iTextLen);
delete[] pElementText;
return TRUE;
}
BOOL CTranslateUTF8::Utf8ToUnicode(LPWSTR strDes,int &iDesSize,LPCSTR strSrc)
{
//int len = 0;
//len = strlen(strSrc);
int unicodeLen = ::MultiByteToWideChar( CP_UTF8,
0,
strSrc,
-1,
NULL,
0 );
if(iDesSize<unicodeLen+2)
{
iDesSize=unicodeLen+2;
}
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
::MultiByteToWideChar( CP_UTF8,
0,
strSrc,
-1,
(LPWSTR)pUnicode,
unicodeLen );
memcpy(strDes,pUnicode,unicodeLen*2);
delete [] pUnicode;
return TRUE;
}
BOOL CTranslateUTF8::AsciiToUtf8(LPSTR strDes,int &iDesSize,LPCSTR strSrc)
{
WCHAR *buf=new WCHAR[iDesSize];
memset(buf,0,iDesSize*2);
int len=iDesSize;
if(AsciiToUnicode(buf,len,strSrc))
{
if(UnicodeToUtf8(strDes,iDesSize,buf))
{
delete [] buf;
return TRUE;
}
}
delete [] buf;
return FALSE;
}
BOOL CTranslateUTF8::Utf8ToAscii(LPSTR strDes,int &iDesSize,LPCSTR strSrc)
{
WCHAR *buf=new WCHAR[iDesSize];
memset(buf,0,iDesSize*2);
int len=iDesSize;
if(Utf8ToUnicode(buf,len,strSrc))
{
if(UnicodeToAscii(strDes,iDesSize,buf))
{
delete [] buf;
return TRUE;
}
}
delete [] buf;
return FALSE;
}
BOOL CTranslateUTF8::Utf8ToTstr(LPTSTR strDes,int &iDesSize,LPCSTR strSrc)
{
#ifdef _UNICODE
return Utf8ToUnicode(strDes,iDesSize,strSrc);
#else
return Utf8ToAscii(strDes,iDesSize,strSrc);
#endif
}
BOOL CTranslateUTF8::TstrToUtf8(LPSTR strDes,int &iDesSize,LPCTSTR strSrc)
{
#ifdef _UNICODE
return UnicodeToUtf8(strDes,iDesSize,strSrc);
#else
return AsciiToUtf8(strDes,iDesSize,strSrc);
#endif
}
BOOL CTranslateUTF8::TstrToAscii(LPSTR strDes,int &iDesSize,LPCTSTR strSrc)
{
#ifdef _UNICODE
return UnicodeToAscii(strDes,iDesSize,strSrc);
#else
memcpy(strDes,strSrc,strlen(strSrc));
return TRUE;
#endif
return TRUE;
}
BOOL CTranslateUTF8::TstrToUnicode(LPWSTR strDes,int &iDesSize,LPCTSTR strSrc)
{
#ifdef _UNICODE
memcpy(strDes,strSrc,wcslen(strSrc)*2);
return TRUE;
#else
return AsciiToUnicode(strDes,iDesSize,strSrc);
#endif
}
BOOL CTranslateUTF8::AsciiToTstr(LPTSTR strDes,int &iDesSize,LPCSTR strSrc)
{
#ifdef _UNICODE
return AsciiToUnicode(strDes,iDesSize,strSrc);
#else
strcpy_s(strDes,iDesSize,strSrc);
return TRUE;
#endif
}