`
sealbird
  • 浏览: 580024 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

WideCharToMultiByte和MultiByteToWideChar函数的用法

阅读更多
为了支持Unicode编码,需要多字节与宽字节之间的相互转换。这两个系统函数在使用时需要指定代码页,在实际应用过程中遇到乱码问题,然后重新阅读《Windows核心编程》,总结出正确的用法。
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 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 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 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
分享到:
评论

相关推荐

    MultiByteToWideChar和WideCharToMultiByte用法详解

    ### MultiByteToWideChar 和 WideCharToMultiByte 用法详解 #### 一、引言 在计算机编程中,字符编码是一项重要的技术基础。字符集的选择不仅关系到程序的国际化能力,还会影响到内存的占用以及处理速度等多方面。...

    MultiByteToWideChar和WideCharToMultiByte用法详解.docx

    本文将深入探讨这两个函数的使用方法和参数含义。 **MultiByteToWideChar函数** 此函数的作用是将一个多字节字符串转换为宽字符字符串。它涉及的主要头文件为`windows.h`,宽字符类型`wchar_t`则需要`wchar.h`...

    MultiByteToWideChar和WideCharToMultiByte用法详解.pdf

    【MultiByteToWideChar函数详解】 MultiByteToWideChar是一个Windows API函数,它的主要作用是将一个多字节字符串转换为宽字符(Unicode)字符串。在处理不同编码的字符串时,这个函数非常有用,特别是在需要在多...

    各种字符编码间的转换方法:MultiByteToWideChar和MultiByteToWideChar.pdf

    字符编码转换方法:MultiByteToWideChar和WideCharToMultiByte 在计算机科学中,字符编码是一个非常重要的概念,它决定了计算机如何存储和处理文字信息。不同的操作系统和应用程序使用不同的字符编码标准,因此在...

    各种字符编码间的转换方法:MultiByteToWideChar和MultiByteToWideChar.docx

    字符编码间的转换方法:MultiByteToWideChar和WideCharToMultiByte 在计算机科学中,字符编码是一种将文本数据转换为二进制数据的方式。不同的编码方式可以将同一个字符表示为不同的二进制码,从而导致不同的计算机...

    MFC工程中,几种常见数据类型的转换

    在上面的代码中,我们可以看到,MultiByteToWideChar 函数和 WideCharToMultiByte 函数都是用于字符集转换的重要函数。MultiByteToWideChar 函数将多字节字符转换为宽字节字符,而 WideCharToMultiByte 函数将宽字节...

    (精品)用VC-编程实现转换文本文件的字符编码.pdf

    MultiByteToWideChar函数能够将多字节字符串转换为宽字节字符串(即Unicode编码),它可以处理各种多字节编码,如简体中文(936)、繁体中文(950)等,或使用如CP_ACP、CP_OEMCP等相对应的环境特定代码页。...

    用C语言完成普遍地三种中文内码转换.doc

    大五码转 GBK 码函数使用 MultiByteToWideChar 函数将大五码字符串转换为宽字符字符串,然后使用 WideCharToMultiByte 函数将宽字符字符串转换为 GBK 码字符串。 GBK 转大五码函数使用 MultiByteToWideChar 函数将 ...

    代码转化函数

    - `ANSIToUnicode`函数使用了Windows API中的`MultiByteToWideChar`函数,该函数可以将一个多字节字符序列(如ASCII或ISO 8859系列)转换为宽字符序列(UNICODE)。在这个过程中,首先通过调用`MultiByteToWideChar`...

    utf-8有中文无法解析或乱码提供了一个将读取的内容从utf-8转换为GBK的方法,通过MultiByteToWideChar

    utf-8格式XML时出现乱码的问题,提供了一个将读取的内容从utf-8转换为GBK的方法,通过MultiByteToWideChar函数进行Unicode和GBK之间的转换,从而解决乱码显示问题。 使用Windows API‌ 在Windows平台上,‌可以通过...

    AIUI windows demo 操作手册1

    这个过程可以使用 ::MultiByteToWideChar 和 ::WideCharToMultiByte 函数实现。 代码解读 在 AIUITest.cpp 文件中的第 180 行代码中,我们可以看到将 buffer 转换为 string 的过程。首先,使用 ::...

    C++多字节字符与宽字节字符相互转换

    需要注意的是,WideCharToMultiByte和MultiByteToWideChar函数都依赖于一个字符编码转换参数,这里使用的是CP_ACP,它代表的是当前系统的ANSI代码页,这样在转换时可以确保与系统环境一致。 以下是一些关键的知识点...

    在ANSI环境下读取Unicode文件

    这可以通过MultiByteToWideChar函数实现。之后,使用CStdioFile类的Write方法将Unicode字符写入文件。 具体到代码实现上,首先创建一个CFile对象,以读取模式打开文件,然后读取文件头两个字节。如果确认为Unicode...

    C++字符转化[借鉴].pdf

    这里我们将深入探讨两个关键的API函数——`MultiByteToWideChar`和`WideCharToMultiByte`,它们是Windows API提供的用于在不同字符编码之间进行转换的函数。 1. `MultiByteToWideChar`函数: 这个函数主要用于将一...

    C++各种编码转换 Unicode UTF8

    接下来,使用`WideCharToMultiByte`函数将宽字符转换为UTF-8编码的字符串。该函数同样接受多个参数: - `CP_UTF8`: 指定转换为目标为UTF-8编码。 - `0`: 不使用特殊标志。 - `lpszW`: 宽字符源字符串。 - `nLen`: ...

    VC++常用函数

    在VC++中,可以使用`MultiByteToWideChar`和`WideCharToMultiByte`函数来进行编码之间的转换。 --- #### 改变颜色(整个窗体的控件) **知识点13:改变窗体颜色** 要改变窗体及其所有子控件的颜色,可以通过遍历...

    windows api 中文帮助

    VB(Visual Basic)例子则可能包含如何在VB环境中调用这些Windows API函数的代码片段,帮助开发者理解API的使用方法和应用场景。例如,VB中调用API可能需要使用 Declare 函数来导入外部函数,并使用ByVal、ByRef等...

    VC 函数库+各种功能的实现

    - **示例**: 使用`MultiByteToWideChar`和`WideCharToMultiByte`函数转换编码。 #### 十三、改变颜色(整个窗体的控件) - **知识点**: 改变控件颜色涉及到设置控件的背景色和前景色。 - **示例**: 使用`...

    Unicode与ANSI字符串之间的转换

    这种转换通常可以通过 Windows API 函数 `WideCharToMultiByte` 和 `MultiByteToWideChar` 来完成。 #### WideCharToMultiByte `WideCharToMultiByte` 函数用于将 Unicode 字符串转换为多字节字符集(MBCS)字符串...

    多字节与UTF-8、Unicode之间的转换

    - 使用`MultiByteToWideChar`函数将多字节字符串转换为宽字符字符串(WCHAR数组)。 - 再通过`WideCharToMultiByte`函数将宽字符字符串转换为UTF-8编码的字符序列。 2. **UTF8ToMB** 该函数实现了从UTF-8编码...

Global site tag (gtag.js) - Google Analytics