多字节tetowidechar转换 我在Visual Studio 9上有Visual C++应用程序。我们使用“Unicode字符集”作为字符集构建了应用程序。我们使用windows API A2T进行转换,但是多字节字符(韩文文本)转换不正确。我看到了A2T的代码,它使用CP_THREAD_ACP作为MultiByteToWideChar的第一个参数。当我对同一个API使用CP_UTF8时,我得到了正确的结果。根据CP_THREAD_ACP的评论,它提到了“当前线程的ANSI代码页”,即使我已经用Unicode字符集构建了代码,我也不确定A2T函数为什么不使用UTF8,“Unicode字符集”意味着Windows API使用wchar_t,并使用UTF-16与您的程序通信。如果您的程序使用“窄”char字符串,则必须执行转换以将输入的任何字符集转换为UTF-16

多字节tetowidechar转换 我在Visual Studio 9上有Visual C++应用程序。我们使用“Unicode字符集”作为字符集构建了应用程序。我们使用windows API A2T进行转换,但是多字节字符(韩文文本)转换不正确。我看到了A2T的代码,它使用CP_THREAD_ACP作为MultiByteToWideChar的第一个参数。当我对同一个API使用CP_UTF8时,我得到了正确的结果。根据CP_THREAD_ACP的评论,它提到了“当前线程的ANSI代码页”,即使我已经用Unicode字符集构建了代码,我也不确定A2T函数为什么不使用UTF8,“Unicode字符集”意味着Windows API使用wchar_t,并使用UTF-16与您的程序通信。如果您的程序使用“窄”char字符串,则必须执行转换以将输入的任何字符集转换为UTF-16,c++,unicode,converter,C++,Unicode,Converter,“unicode字符集”不会导致任何内容被解释为UTF-8。A2T宏用于将使用相关ANSI代码页编码的字符串转换为使用相关TCHAR编码的TCHAR字符串。由于启用了“Unicode字符集”,TCHAR为wchar\u t,编码为UTF-16。因此,A2T宏将字符串从ANSI代码页转换为UTF-16。(如果将程序设置为使用ANSI而不是Unicode,则TCHAR为char,编码为ANSI代码页编码,A2T宏应为不可操作。) 从使用CP_UTF8生成正确转换的事实可以明显看出,您的字符串没有使用

“unicode字符集”不会导致任何内容被解释为UTF-8。

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

从使用
CP_UTF8
生成正确转换的事实可以明显看出,您的字符串没有使用ANSI代码页,而是使用UTF-8。ANSI代码页不能设置为UTF-8,因此
A2T
不是合适的转换方法


您需要分析是什么决定了程序中输入字符串的编码,以及需要什么样的输出编码,然后选择合适的转换例程


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

有一些关于如何使错误处理Unicode的库在中仍能正常工作的信息。可能会有帮助。这本书读得很好