【发布时间】:2018-01-23 02:12:53
【问题描述】:
我注意到 WriteConsole() 函数调用只接受宽字符作为输入(否则会打印问号字符)。
WriteConsole(outputHandle, L"A Message", 268, NULL, NULL);
我知道可以调用 SetConsoleCP() 来更改所使用的字符编码模式,但是 ASCII 似乎是一个太多的特殊字符集,必须通过这个函数调用来设置。有没有更好的方法来更改 Windows 控制台应用程序中的字符集?
【问题讨论】:
-
现代控制台程序应该使用 Unicode(即
WriteConsoleW,而不是WriteConsoleA)。 CMD shell 自 1993 年以来一直使用 Unicode,因为它始终是一个 NT 应用程序,不必担心与基于 DOS 的 Windows 9x 兼容。过去,大多数控制台应用程序都使用旧代码页,这允许在基于 DOS 和基于 NT 的 Windows 系统上运行它们。SetConsoleCP和SetConsoleOutputCP用于为这些遗留应用程序设置控制台的输入和输出代码页。默认为系统 OEM 代码页(例如,美国为 437,西欧为 850)。
标签: c windows console-application