MultiByteToWideChar conversion
MultiByteToWideChar conversion
我在Visual Studio 9.0上有一个Visual C++应用程序。我们使用"Unicode字符集"作为字符集构建了该应用程序。我们使用windows API A2T进行转换,但多字节字符(朝鲜语文本)无法正确转换。我看到了A2T的代码,它使用CP_THREAD_ACP作为MultiByteToWideChar的第一个参数。当我为同一个API使用CP_UTF8时,我得到了正确的结果。根据CP_THREAD_ACP的注释,它提到了"当前线程的ANSI代码页",尽管我已经用Unicode字符集构建了代码,但我不确定为什么A2T函数不使用UTF8
A2T
宏用于将使用相关ANSI代码页编码的字符串转换为使用相关tchar编码的TCHAR
字符串。由于您启用了"Unicode字符集",因此TCHAR
为wchar_t
,编码为UTF-16。因此A2T
宏将ANSI代码页中的字符串转换为UTF-16。(如果将程序设置为使用ANSI而不是Unicode,则TCHAR
为char,编码为ANSI代码页编码,A2T
宏应成为no-op。)
从使用CP_UTF8
产生正确转换的事实可以明显看出,您的字符串没有使用ANSI代码页,而是使用UTF-8。ANSI代码页不能设置为UTF-8,因此A2T
不是合适的转换方法。
您需要分析是什么决定了程序中输入字符串的编码,以及需要什么输出编码,然后选择合适的转换例程。
请注意,您不仅仅是在寻找一个例程,该例程可以在您的机器上当前使用的编码与您碰巧使用的特定配置中的程序之间进行转换。您正在寻找一个例程,该例程将在任何支持的计算机上的任何支持的配置下使用适当的编码。也就是说,你选择的例程需要根据程序和机器的配置来改变它执行的转换。例如,基于TCHAR
的函数和宏可以根据程序的配置方式使用不同的编码,但它们总是相互配合,因为它们总是使用一致的TCHAR
编码,无论在任何给定的配置中发生什么。
"unicode字符集"意味着Windows API使用wchar_t
,并使用UTF-16与程序通信。如果您的程序使用"窄"char
字符串,则必须执行转换以将您输入的任何字符集转换为UTF-16。
"unicode字符集"不会导致任何内容被解释为UTF-8。
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- "No suitable conversion function from 'std::string' to 'const char *' exists"
- 如何'Invalid conversion'和'no match for operator'更正这些 c++ 错误
- 访问函数变体时"Invalid conversion"错误
- 提升获取文本的区域设置"Conversion failed"
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- 函数模板不起作用,出现错误"No suitable user-defined conversion"
- 在C++中使用地图时"No viable conversion from..."
- Libav AVFrame to Opencv Mat to AVPacket conversion
- cpp rgb to yuv422 conversion
- 尝试将类作为参数传递给不同的类构造函数,但收到"conversion"错误
- "Ambiguous conversion sequence" - 这个概念的目的是什么?
- Python bool conversion to C++ (pybind11)
- conversion to int16_t c++
- 使用strupr和strlwr时如何解决错误"invalid conversion of char to char*"?
- 如何解决"expected constructor, destructor, or type conversion before ‘(’ token"错误?
- "conversion from void to non scalar type string"是什么意思?
- 我收到一个" conversion from ‘std::string (*)[50]’ to non-scalar type ‘std::string’ requested"错误,似乎无法修复它