gpt4 book ai didi

windows - 在 Windows C++ 控制台应用程序中使用 wchar_t/wmain 是否有意义?

转载 作者:可可西里 更新时间:2023-11-01 10:26:35 25 4
gpt4 key购买 nike

我一直在用 C++ 编写一个新的命令行应用程序。我们支持的平台之一当然是 Windows。

默认情况下,Windows 控制台根据区域设置使用 OEM 代码页(例如,在我的机器上是 CP437/DOS.Western)。我认为,如果它是 Windows 西里尔文版本,它应该是 CP866,等等。这些 OEM 代码页仅包含 256 个字符)

我认为这意味着 Windows 控制台根据默认代码页将输入的击键转换为字符。 (并且,根据当前选择的字体,如果有相应的字形,则显示)。

  1. 在这种情况下,在我的应用程序中使用 wmain/wchar_t 和宽字符类型是否有意义?
  2. 使用宽类型有什么好处吗?或者如果只使用 char * 会有什么严重的问题吗?
  3. 当使用宽字符类型时,命令行参数和环境字符串的编码是什么——(wchar_t * argv[] 和 wchar_t * envp[]),我的意思是。它们是否已通过 Windows CRT 转换为 UTF-16,还是保持原样?

感谢您的贡献。

最佳答案

您似乎假设 Windows 在内部以指定的代码页运行。这不是真的。 Windows 在内部以 Unicode (UTF-16) 运行。对于使用 char 而不是 wchar_t 的遗留软件,输入和输出被转换为指定的代码页。

I think what this means is the Windows console translates the input key strokes into characters based on the default code page

这是不正确的。击键到 (Unicode) 字符的映射由键盘布局定义。这完全独立于代码页。例如,您可以在使用西里尔代码页的系统上使用中文键盘布局。

  1. 不仅完全可以使用wchar_t,而且还是推荐的方式。
  2. 是的,有一个优势:您的程序可以处理 Windows 支持的所有字符。如果使用 char,则无法处理任何不在当前代码页中的字符。
  3. 它们没有被转换——它们保持原样,即 UTF-16 字符。

不幸的是,命令提示符本身是一个“ANSI”应用程序,因此它受到“ANSI”的所有限制,如果您从命令提示符使用它,这会影响您的应用程序。然而,控制台应用程序可以以其他方式使用,没有命令提示符窗口,然后它可以完全支持 Unicode。

关于windows - 在 Windows C++ 控制台应用程序中使用 wchar_t/wmain 是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15183542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com