int MultiByteToWideChar(UINT uCodePage,DWORD dwFlags,PCSTR pMultiByteStr,int cchMultiByte,PWSTR pWideCharStr,int cchWideChar)
功能:将多字节字符串转换成宽字节字符串,待转换的字符串并不一定是多字节的。
参数 - uCodePage:与多字节字符串相关的代码页号
dwFlags: 通常置为0
PCSTR:要转换的字符串
cchMultiByte:要转换的字符串长度(按字节计算),如果为-1,则要转换的字符串是以0结束的,长度可以自动计算
pWideCharStr:转换后的字符串
cchWideChar:转换后字符缓存的空间大小(以字符计量),如果为0,那么函数不执行字符串的转换,返回转换取得成功所需要的缓存空间大小
返回值 - 返回转换成功所需缓存空间大小,以字符计算
int WideCharToMultiByte(
UINT uCodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cchMultiByte,
LPCSTR lpDefaultChar,
LPBOOL lpUsedDefaultChar)
功能:将一个宽字符的字符串映射为一个新字符串,新字符串不一定来自多字节字符集
参数 - uCodePage:与多字节字符串相关的代码页号
dwFlags: 通常置为0
lpWideCharStr:要转换的字符串
cchWideChar:指定由参数lpWideCharStr指向的字符串的Unicode(16位)字符数,如果为-1,则假定字符串是以0结束的,长度自动计算
lpMultiByteStr:转换后的字符串
cchMultiByte:转换后字符缓存的空间大小(以字符计量),如果为0,那么函数不执行字符串的转换,返回转换取得成功所需要的缓存空间大小
lpDefaultChar:一个宽字符不能在指定代码页里表示时用到的字符
lpUsedDefaultChar:表示是否使用缺省字符
返回值 - 返回转换成功所需缓存空间大小,以字符计算
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;
}
string UnicodeToANSI( const wstring& str )
{
char* pElementText;
int iTextLen;
// wide char to multi char
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;
}
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;
}
string UnicodeToUTF8( const wstring& str )
{
char* pElementText;
int iTextLen;
// wide char to multi char
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;
}