【问题标题】:How to prevent windows WriteConsole() from using wide chars by default如何防止 Windows WriteConsole() 默认使用宽字符
【发布时间】: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 系统上运行它们。 SetConsoleCPSetConsoleOutputCP 用于为这些遗留应用程序设置控制台的输入和输出代码页。默认为系统 OEM 代码页(例如,美国为 437,西欧为 850)。

标签: c windows console-application


【解决方案1】:

我解决了我的问题。我的编译器(Visual Studio)默认设置为使用 Unicode(在项目-> 项目名称属性-> 配置属性-> 常规中),所以我将该设置更改为“使用多字节字符集”。编译器基本上将 WriteConsole() 宏设置为 WriteConsoleW()(用于宽字符)而不是 WriteConsoleA()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2021-12-28
    相关资源
    最近更新 更多