我一直在用C ++编写一个新的命令行应用程序。我们支持的一个平台当然是Windows。
默认情况下,Windows控制台根据区域设置使用OEM代码页(例如,在我的机器上它是CP437 / DOS.Western)。我认为,如果它是Windows Cyrillic版本,它将是CP866,依此类推。这些OEM代码页只包含256个字符)
我认为这意味着Windows控制台会根据默认代码页将输入击键转换为字符。 (并且,根据当前选择的字体,如果有相应的字形,则会显示)。
感谢您的贡献。
答案 0 :(得分:2)
您似乎假设Windows内部在指定的代码页中工作。这不是真的。 Windows内部使用Unicode(UTF-16)。对于使用char
而不是wchar_t
的旧版软件,输入和输出会转换为指定的代码页。
我认为这意味着Windows控制台会根据默认代码页将输入击键转换为字符
这不正确。键击到(Unicode)字符的映射由键盘布局定义。这完全独立于代码页。例如,您可以在使用西里尔语代码页的系统上使用中文键盘布局。
wchar_t
不仅非常有意义,而且推荐方式。不幸的是,命令提示符本身是一个“ANSI”应用程序,因此它受到“ANSI”的所有限制的影响,如果您在命令提示符下使用它,这会影响您的应用程序。但是,可以在没有命令提示符窗口的情况下以其他方式使用控制台应用程序,然后它可以完全支持Unicode。