c++ - MultiByteToWideChar 转换

标签 c++ unicode converters

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

最佳答案

A2T 宏用于将使用相关 ANSI 代码页编码的字符串转换为使用相关 tchar 编码的 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 不是合适的转换方法。


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

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

关于c++ - MultiByteToWideChar 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18328378/

相关文章:

ios - 谁能告诉我如何在 Objective-c 中将 UTF-8 值转换为 UCS-2 值?

c++11如何将十六进制字符串转换为unicode字符串

java - 自定义对象转换器 JavaFx FXML

c++ - CreateFile 无法共享串行 (COM) 端口

c++ - 我的程序在 boost::thread::thread_start_function 中崩溃,我该如何调试

java - 无法解析包含中文内容的 XML 文件

c# - DataTemplate 通过转换器绑定(bind)网格背景

java - 使用 Apache POI 和 itext 将 word(.docx) 转换为 pdf

c++ - QGraphicsPixmapItem 不可选

c++将文件中的行解析为流