WideCharToMultiByte和MultiByteToWideChar函数的用法

来源:互联网 发布:女人出轨 知乎 编辑:程序博客网 时间:2024/05/16 15:22

先看看这篇关于Windows编码的文章:http://blog.csdn.net/shyboy_nwpu/article/details/4431668

  再看看这篇关于两个函数参数和用法的说明:http://www.cnblogs.com/wind-net/archive/2012/10/10/2718340.html

  为了支持Unicode编码,需要多字节与宽字节之间的相互转换。这两个系统函数在使用时需要指定代码页。

  WideCharToMultiByte的代码页用来标记与新转换的字符串相关的代码页。
  MultiByteToWideChar的代码页用来标记与一个多字节字符串相关的代码页。
常用的代码页由CP_ACP和CP_UTF8两个:
  使用CP_ACP代码页就实现了ANSI与Unicode之间的转换。
  使用CP_UTF8代码页就实现了UTF-8与Unicode之间的转换。


1. ANSI to Unicode

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; }

2. 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

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

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;}


0 0
原创粉丝点击