【发布时间】:2018-04-08 17:52:24
【问题描述】:
为了将下标显示为输出,我在 C++ 代码中使用了 Unicode。例如u2080 用于下标 0,但是,Windows 控制台中的输出在控制台屏幕上显示一些奇怪的字符,而在 ubuntu 终端中它显示精确的下标 0。
为什么 unicode 没有显示在 Windows 控制台中。
【问题讨论】:
-
因为 Windows 控制台默认使用非 unicode 的“代码页”。您可以将其配置为使用 UTF-8 (related)。
-
@FelixPalmen - windows 和控制台使用 utf-16 作为本机。当我们以 utf-16 (WriteConsoleW) 输出时 - 使用哪个代码页无关紧要 - 处理文本时无需任何翻译。仅当我们使用 not W api 将多字节转换为 utf-16 时才使用代码页
-
@RbMm 我认为这不是真的。 Windows 使用 UTF-16,正确(以 UCS-2 开始)。但是控制台是一个不同的野兽,可能是为了向下兼容。在我的机器上,默认代码页是
850(几乎与 ISO-8859-15 相同) -
@RbMm 关于您的编辑:使用本机 win32 控制台 API 时可能是这样。使用 C 或 C++ 编程,您通常希望保持可移植性,因此您使用
stdio/iostreams。 -
@FelixPalmen - 你错了。我说的 100% 正确。控制台当然使用 utf-16 作为本机。我很清楚这一点。当我们使用 W api - “代码页” 没有任何作用。当且仅当我们使用 A api 或
WriteFilefpr 输出时使用代码页。