为了支持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函数** 此函数的作用是将一个多字节字符串转换为宽字符字符串。它涉及的主要头文件为`windows.h`,宽字符类型`wchar_t`则需要`wchar.h`...
【MultiByteToWideChar函数详解】 MultiByteToWideChar是一个Windows API函数,它的主要作用是将一个多字节字符串转换为宽字符(Unicode)字符串。在处理不同编码的字符串时,这个函数非常有用,特别是在需要在多...
字符编码转换方法:MultiByteToWideChar和WideCharToMultiByte 在计算机科学中,字符编码是一个非常重要的概念,它决定了计算机如何存储和处理文字信息。不同的操作系统和应用程序使用不同的字符编码标准,因此在...
在上面的代码中,我们可以看到,MultiByteToWideChar 函数和 WideCharToMultiByte 函数都是用于字符集转换的重要函数。MultiByteToWideChar 函数将多字节字符转换为宽字节字符,而 WideCharToMultiByte 函数将宽字节...
MultiByteToWideChar函数能够将多字节字符串转换为宽字节字符串(即Unicode编码),它可以处理各种多字节编码,如简体中文(936)、繁体中文(950)等,或使用如CP_ACP、CP_OEMCP等相对应的环境特定代码页。...
大五码转 GBK 码函数使用 MultiByteToWideChar 函数将大五码字符串转换为宽字符字符串,然后使用 WideCharToMultiByte 函数将宽字符字符串转换为 GBK 码字符串。 GBK 转大五码函数使用 MultiByteToWideChar 函数将 ...
- `ANSIToUnicode`函数使用了Windows API中的`MultiByteToWideChar`函数,该函数可以将一个多字节字符序列(如ASCII或ISO 8859系列)转换为宽字符序列(UNICODE)。在这个过程中,首先通过调用`MultiByteToWideChar`...
utf-8格式XML时出现乱码的问题,提供了一个将读取的内容从utf-8转换为GBK的方法,通过MultiByteToWideChar函数进行Unicode和GBK之间的转换,从而解决乱码显示问题。 使用Windows API 在Windows平台上,可以通过...
这个过程可以使用 ::MultiByteToWideChar 和 ::WideCharToMultiByte 函数实现。 代码解读 在 AIUITest.cpp 文件中的第 180 行代码中,我们可以看到将 buffer 转换为 string 的过程。首先,使用 ::...
需要注意的是,WideCharToMultiByte和MultiByteToWideChar函数都依赖于一个字符编码转换参数,这里使用的是CP_ACP,它代表的是当前系统的ANSI代码页,这样在转换时可以确保与系统环境一致。 以下是一些关键的知识点...
这可以通过MultiByteToWideChar函数实现。之后,使用CStdioFile类的Write方法将Unicode字符写入文件。 具体到代码实现上,首先创建一个CFile对象,以读取模式打开文件,然后读取文件头两个字节。如果确认为Unicode...
这里我们将深入探讨两个关键的API函数——`MultiByteToWideChar`和`WideCharToMultiByte`,它们是Windows API提供的用于在不同字符编码之间进行转换的函数。 1. `MultiByteToWideChar`函数: 这个函数主要用于将一...
接下来,使用`WideCharToMultiByte`函数将宽字符转换为UTF-8编码的字符串。该函数同样接受多个参数: - `CP_UTF8`: 指定转换为目标为UTF-8编码。 - `0`: 不使用特殊标志。 - `lpszW`: 宽字符源字符串。 - `nLen`: ...
在VC++中,可以使用`MultiByteToWideChar`和`WideCharToMultiByte`函数来进行编码之间的转换。 --- #### 改变颜色(整个窗体的控件) **知识点13:改变窗体颜色** 要改变窗体及其所有子控件的颜色,可以通过遍历...
VB(Visual Basic)例子则可能包含如何在VB环境中调用这些Windows API函数的代码片段,帮助开发者理解API的使用方法和应用场景。例如,VB中调用API可能需要使用 Declare 函数来导入外部函数,并使用ByVal、ByRef等...
- **示例**: 使用`MultiByteToWideChar`和`WideCharToMultiByte`函数转换编码。 #### 十三、改变颜色(整个窗体的控件) - **知识点**: 改变控件颜色涉及到设置控件的背景色和前景色。 - **示例**: 使用`...
这种转换通常可以通过 Windows API 函数 `WideCharToMultiByte` 和 `MultiByteToWideChar` 来完成。 #### WideCharToMultiByte `WideCharToMultiByte` 函数用于将 Unicode 字符串转换为多字节字符集(MBCS)字符串...
- 使用`MultiByteToWideChar`函数将多字节字符串转换为宽字符字符串(WCHAR数组)。 - 再通过`WideCharToMultiByte`函数将宽字符字符串转换为UTF-8编码的字符序列。 2. **UTF8ToMB** 该函数实现了从UTF-8编码...