繁体   English   中英

MultiByteToWideChar转换

[英]MultiByteToWideChar conversion

我在Visual Studio 9.0上有一个Visual C ++应用程序。 我们使用“Unicode字符集”作为字符集构建了应用程序。 我们使用Windows API A2T进行转换,但多字节字符(韩语文本)无法正确转换。 我看到了A2T的代码,它使用CP_THREAD_ACP作为MultiByteToWideChar的第一个参数。 当我将CP_UTF8用于相同的API时,我得到了正确的结果。 根据CP_THREAD_ACP的注释,它提到“当前线程的ANSI代码页”我不确定即使我用Unicode字符集构建代码为什么A2T函数不使用UTF8

A2T宏用于使用相关的tchar编码将使用相关ANSI代码页编码的字符串转换为TCHAR字符串。 由于您已启用“Unicode字符集”,因此TCHARwchar_t ,编码为UTF-16。 因此A2T宏将字符串从ANSI代码页转换为UTF-16。 (如果将程序设置为使用ANSI而不是Unicode,则TCHAR为char,编码为ANSI代码页编码, A2T宏应成为无操作。)

很明显,使用CP_UTF8产生正确的转换,您的字符串不使用ANSI代码页,而是使用UTF-8。 ANSI代码页不能设置为UTF-8,因此A2T不适合转换。


您需要分析确定程序中输入字符串编码的因素以及所需的输出编码,然后选择适当的转换例程。

请注意,您不只是在寻找一个例程,该例程可以在您计算机上正在使用的编码与您正在使用的特定配置中的程序之间进行转换。 您正在寻找在任何支持的计算机上的任何受支持配置下使用适当编码的例程。 即您选择的例程需要根据程序和机器的配置更改它执行的转换。 例如,基于TCHAR的函数和宏可以根据程序的配置方式使用不同的编码,但它们总是相互TCHAR ,因为它们总是使用一致的TCHAR编码,无论在任何给定的配置中发生什么。

“unicode字符集”表示Windows API使用wchar_t ,并使用UTF-16与您的程序通信。 如果你的程序使用“窄” char的字符串,你必须执行转换从任何字符集,你输入UTF-16转换。

“unicode character set”不会导致任何东西被解释为UTF-8。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM