轉自:http://www.cnblogs.com/gakusei/articles/1585211.html
為了支持Unicode編碼,需要多字節與寬字節之間的相互轉換。這兩個系統函數在使用時需要指定代碼頁,在實際應用過程中遇到亂碼問題,然后重新閱讀《Windows核心編程》,總結出正確的用法。
WideCharToMultiByte的代碼頁用來標記與新轉換的字符串相關的代碼頁。
MultiByteToWideChar的代碼頁用來標記與一個多字節字符串相關的代碼頁。
常用的代碼頁由CP_ACP和CP_UTF8兩個。
使用CP_ACP代碼頁就實現了ANSI與Unicode之間的轉換。
使用CP_UTF8代碼頁就實現了UTF-8與Unicode之間的轉換。
下面是代碼實現:
1.? ANSI to Unicode
1 // ANSI to Unicode
2 #include <
string>
3 using namespace std;
4 wstring ANSIToUnicode(
const string&
str )
5 {
6 int len =
0;
7 len =
str.length();
8 // 返回轉換后unicode的長度
9 int unicodeLen =
::MultiByteToWideChar(
10 CP_ACP,
// 實現ANSI與Unicode之間的轉換
11 0,
//
12 str.c_str(),
// 轉碼前的數據
13 -
1,
14 NULL,
15 0 );
16 // 申請內存
17 wchar_t *
pUnicode;
18 pUnicode =
new wchar_t[unicodeLen+
1];
19 // 初始化申請的內存
20 memset(pUnicode,
0,(unicodeLen+
1)*
sizeof(wchar_t));
21 ::MultiByteToWideChar(
22 CP_ACP,
23 0,
24 str.c_str(),
// 轉換前數據
25 -
1,
26 (LPWSTR)pUnicode,
// 轉換后數據
27 unicodeLen );
// 轉換長度
28 wstring rt;
29 rt = ( wchar_t*
)pUnicode;
30 delete pUnicode;
// 刪除申請的內存
31
32 return rt;
33 }
?
2.? Unicode to ANSI
// Unicode To ANSI
string UnicodeToANSI(
const wstring&
str )
{char*
pElementText;int iTextLen;// wide char to multi chariTextLen =
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
//UTF8 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????
// Unicode To UTF8
string UnicodeToUTF8(
const wstring&
str )
{char*
pElementText;int iTextLen;// wide char to multi chariTextLen =
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;
} ?
總結
以上是生活随笔為你收集整理的WideCharToMultiByte和MultiByteToWideChar函数的用法(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。