首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

WideCharToMultiByte跟MultiByteToWideChar函数的用法

2012-12-19 
WideCharToMultiByte和MultiByteToWideChar函数的用法为了支持Unicode编码,需要多字节与宽字节之间的相互

WideCharToMultiByte和MultiByteToWideChar函数的用法
为了支持Unicode编码,需要多字节与宽字节之间的相互转换。这两个系统函数在使用时需要指定代码页,在实际应用过程中遇到乱码问题,然后重新阅读《Windows核心编程》,总结出正确的用法。
WideCharToMultiByte的代码页用来标记与新转换的字符串相关的代码页。
MultiByteToWideChar的代码页用来标记与一个多字节字符串相关的代码页。
常用的代码页由CP_ACP和CP_UTF8两个。
使用CP_ACP代码页就实现了ANSI与Unicode之间的转换。
使用CP_UTF8代码页就实现了UTF-8与Unicode之间的转换。
下面是代码实现:

1.  ANSI to Unicodewstring 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 ANSIstring 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;}3.  UTF-8 to Unicodewstring 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; // 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;}
荷包蛋
关注 - 0
粉丝 - 0
关注博主0 0 0
(请您对文章做出评价)? 上一篇:vb 数组(非字符串) vc

posted @ 2009-10-17 20:21 荷包蛋 阅读(2797) 评论(0)  编辑 收藏 所属分类: win32 api

热点排行