WideCharToMultiByte和MultiByteToWideChar函数的用法

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WideCharToMultiByte和MultiByteToWideChar函数的用法相关的知识,希望对你有一定的参考价值。

先看看这篇关于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

复制代码
 1 wstring ANSIToUnicode( const string& str )
 2 {
 3 int len = 0;
 4 len = str.length();
 5 int unicodeLen = ::MultiByteToWideChar( CP_ACP,
 6             0,
 7             str.c_str(),
 8             -1,
 9             NULL,
10             0 ); 
11 wchar_t * pUnicode; 
12 pUnicode = new wchar_t[unicodeLen+1]; 
13 memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t)); 
14 ::MultiByteToWideChar( CP_ACP,
15          0,
16          str.c_str(),
17          -1,
18          (LPWSTR)pUnicode,
19          unicodeLen ); 
20 wstring rt; 
21 rt = ( wchar_t* )pUnicode;
22 delete pUnicode; 
23 return rt; 
24 }
复制代码

 

2. Unicode to ANSI

复制代码
 1 string UnicodeToANSI( const wstring& str )
 2 {
 3 char*     pElementText;
 4 int    iTextLen;
 5 // wide char to multi char
 6 iTextLen = WideCharToMultiByte( CP_ACP,
 7          0,
 8          str.c_str(),
 9          -1,
10          NULL,
11         0,
12          NULL,
13          NULL );
14 pElementText = new char[iTextLen + 1];
15 memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
16 ::WideCharToMultiByte( CP_ACP,
17          0,
18          str.c_str(),
19          -1,
20          pElementText,
21          iTextLen,
22          NULL,
23          NULL );
24 string strText;
25 strText = pElementText;
26 delete[] pElementText;
27 return strText;
28 }
复制代码

 

3. UTF-8 to Unicode

复制代码
 1 wstring UTF8ToUnicode( const string& str )
 2 {
 3 int len = 0;
 4 len = str.length();
 5 int unicodeLen = ::MultiByteToWideChar( CP_UTF8,
 6             0,
 7             str.c_str(),
 8             -1,
 9             NULL,
10             0 ); 
11 wchar_t * pUnicode; 
12 pUnicode = new wchar_t[unicodeLen+1]; 
13 memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t)); 
14 ::MultiByteToWideChar( CP_UTF8,
15          0,
16          str.c_str(),
17         -1,
18          (LPWSTR)pUnicode,
19          unicodeLen ); 
20 wstring rt; 
21 rt = ( wchar_t* )pUnicode;
22 delete pUnicode; 
23 return rt; 
24 }
复制代码

 

4. Unicode to UTF-8

复制代码
 1 string UnicodeToUTF8( const wstring& str )
 2 {
 3 char*     pElementText;
 4 int    iTextLen;
 5 // wide char to multi char
 6 iTextLen = WideCharToMultiByte( CP_UTF8,
 7          0,
 8          str.c_str(),
 9          -1,
10          NULL,
11          0,
12          NULL,
13          NULL );
14 pElementText = new char[iTextLen + 1];
15 memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
16 ::WideCharToMultiByte( CP_UTF8,
17          0,
18          str.c_str(),
19          -1,
20          pElementText,
21          iTextLen,
22          NULL,
23          NULL );
24 string strText;
25 strText = pElementText;
26 delete[] pElementText;
27 return strText;
28 
29 }
 
示例下载地址: http://download.csdn.net/detail/qq_23992597/9696223
 
http://blog.csdn.net/qq_23992597/article/details/53385756

以上是关于WideCharToMultiByte和MultiByteToWideChar函数的用法的主要内容,如果未能解决你的问题,请参考以下文章

WideCharToMultiByte和MultiByteToWideChar函数的用法

ANIS与UNICODE字符格式转换:MultiByteToWideChar() 和WideCharToMultiByte() 函数

MultiByteToWideChar 和 WideCharToMultiByte 用法详解

你如何正确使用 WideCharToMultiByte

为啥我在使用 WideCharToMultiByte 时得到错误的字符数组?

请问如何用C语言实现汉字,和Unicode编码的转换?