static
std::wstring MBytesToWString(
const
char
*
lpcszString);
static std:: string WStringToMBytes( const wchar_t * lpwcszWString);
static std::wstring UTF8ToWString( const char * lpcszString);
static std:: string WStringToUTF8( const wchar_t * lpwcszWString);
static std:: string WStringToMBytes( const wchar_t * lpwcszWString);
static std::wstring UTF8ToWString( const char * lpcszString);
static std:: string WStringToUTF8( const wchar_t * lpwcszWString);
std::wstring KKLogObject::MBytesToWString(
const
char
*
lpcszString)
{
int len = strlen(lpcszString);
int unicodeLen = ::MultiByteToWideChar(CP_ACP, 0 , lpcszString, - 1 , NULL, 0 );
wchar_t * pUnicode = new wchar_t[unicodeLen + 1 ];
memset(pUnicode, 0 , (unicodeLen + 1 ) * sizeof (wchar_t));
::MultiByteToWideChar(CP_ACP, 0 , lpcszString, - 1 , (LPWSTR)pUnicode, unicodeLen);
wstring wString = (wchar_t * )pUnicode;
delete [] pUnicode;
return wString;
}
std:: string KKLogObject::WStringToMBytes( const wchar_t * lpwcszWString)
{
char * pElementText;
int iTextLen;
// wide char to multi char
iTextLen = ::WideCharToMultiByte(CP_ACP, 0 , lpwcszWString, - 1 , NULL, 0 , NULL, NULL);
pElementText = new char [iTextLen + 1 ];
memset(( void * )pElementText, 0 , (iTextLen + 1 ) * sizeof ( char ));
::WideCharToMultiByte(CP_ACP, 0 , lpwcszWString, 0 , pElementText, iTextLen, NULL, NULL);
std:: string strReturn(pElementText);
delete [] pElementText;
return strReturn;
}
std::wstring KKLogObject::UTF8ToWString( const char * lpcszString)
{
int len = strlen(lpcszString);
int unicodeLen = ::MultiByteToWideChar(CP_UTF8, 0 , lpcszString, - 1 , NULL, 0 );
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen + 1 ];
memset(( void * )pUnicode, 0 , (unicodeLen + 1 ) * sizeof (wchar_t));
::MultiByteToWideChar(CP_UTF8, 0 , lpcszString, - 1 , (LPWSTR)pUnicode, unicodeLen);
wstring wstrReturn(pUnicode);
delete [] pUnicode;
return wstrReturn;
}
std:: string KKLogObject::WStringToUTF8( const wchar_t * lpwcszWString)
{
char * pElementText;
int iTextLen = ::WideCharToMultiByte(CP_UTF8, 0 , (LPWSTR)lpwcszWString, - 1 , NULL, 0 , NULL, NULL);
pElementText = new char [iTextLen + 1 ];
memset(( void * )pElementText, 0 , (iTextLen + 1 ) * sizeof ( char ));
::WideCharToMultiByte(CP_UTF8, 0 , (LPWSTR)lpwcszWString, - 1 , pElementText, iTextLen, NULL, NULL);
std:: string strReturn(pElementText);
delete [] pElementText;
return strReturn;
}
{
int len = strlen(lpcszString);
int unicodeLen = ::MultiByteToWideChar(CP_ACP, 0 , lpcszString, - 1 , NULL, 0 );
wchar_t * pUnicode = new wchar_t[unicodeLen + 1 ];
memset(pUnicode, 0 , (unicodeLen + 1 ) * sizeof (wchar_t));
::MultiByteToWideChar(CP_ACP, 0 , lpcszString, - 1 , (LPWSTR)pUnicode, unicodeLen);
wstring wString = (wchar_t * )pUnicode;
delete [] pUnicode;
return wString;
}
std:: string KKLogObject::WStringToMBytes( const wchar_t * lpwcszWString)
{
char * pElementText;
int iTextLen;
// wide char to multi char
iTextLen = ::WideCharToMultiByte(CP_ACP, 0 , lpwcszWString, - 1 , NULL, 0 , NULL, NULL);
pElementText = new char [iTextLen + 1 ];
memset(( void * )pElementText, 0 , (iTextLen + 1 ) * sizeof ( char ));
::WideCharToMultiByte(CP_ACP, 0 , lpwcszWString, 0 , pElementText, iTextLen, NULL, NULL);
std:: string strReturn(pElementText);
delete [] pElementText;
return strReturn;
}
std::wstring KKLogObject::UTF8ToWString( const char * lpcszString)
{
int len = strlen(lpcszString);
int unicodeLen = ::MultiByteToWideChar(CP_UTF8, 0 , lpcszString, - 1 , NULL, 0 );
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen + 1 ];
memset(( void * )pUnicode, 0 , (unicodeLen + 1 ) * sizeof (wchar_t));
::MultiByteToWideChar(CP_UTF8, 0 , lpcszString, - 1 , (LPWSTR)pUnicode, unicodeLen);
wstring wstrReturn(pUnicode);
delete [] pUnicode;
return wstrReturn;
}
std:: string KKLogObject::WStringToUTF8( const wchar_t * lpwcszWString)
{
char * pElementText;
int iTextLen = ::WideCharToMultiByte(CP_UTF8, 0 , (LPWSTR)lpwcszWString, - 1 , NULL, 0 , NULL, NULL);
pElementText = new char [iTextLen + 1 ];
memset(( void * )pElementText, 0 , (iTextLen + 1 ) * sizeof ( char ));
::WideCharToMultiByte(CP_UTF8, 0 , (LPWSTR)lpwcszWString, - 1 , pElementText, iTextLen, NULL, NULL);
std:: string strReturn(pElementText);
delete [] pElementText;
return strReturn;
}
字符编码转换
本文提供了C++中ANSI、UNICODE及UTF-8编码之间互相转换的方法。通过几个具体函数实现不同编码间的转换,包括从ANSI到宽字符、从宽字符到ANSI、从UTF-8到宽字符以及从宽字符到UTF-8。
2万+

被折叠的 条评论
为什么被折叠?



