【问题标题】:Why is UTF-8 output to C console working with Cygwin but not with MinGW?为什么 UTF-8 输出到 C 控制台可以与 Cygwin 一起使用,但不能与 MinGW 一起使用?
【发布时间】:2020-06-01 13:09:00
【问题描述】:

我希望我的代码输出 unicode 字符。
这是我的代码:

printf("\u2660"); //Spade character

使用 Cygwin 编译和执行时,它工作正常,并显示黑桃字符(♠)。
但是,它不适用于 MinGW,因为 UTF-8 编码显示为三个字符 (ÔÖá)。

在可执行文件中,字符在两种情况下都存储为 UTF-8,因此问题不是来自编译。

那么,为什么 Cygwin 和 MinGW 的控制台行为不同?
是否也可以通过 MinGW 显示 UTF-8?

【问题讨论】:

  • 也许 MinGW 和 Cygwin 使用不同的终端仿真器/控制台窗口应用程序?
  • @isrnick 谢谢。为什么 Windows 不尝试显示 UTF-8?如果我可以发布可执行文件而不必分发 cygwin.dll 会方便得多。
  • 如果在两个系统下运行程序并将输出重定向到文件a.out > t.bin,字节转储t.bin的内容。如果相同,那么您有一个控制台差异 - 否则它是一个 a.out 差异。

标签: c utf-8 cygwin mingw


【解决方案1】:

您如何在控制台中运行您的 MinGW 应用程序? 有不同的方法:

  • 命令提示符
  • MinTTY(通常是 MSYS2 shell 的启动方式)
  • Conzole2 或 ConsoleZ 等其他工具

无论哪种方式,您都应该转到“属性”或“选项”(前 2 个通过单击控制台窗口左上角的图标)并将字体更改为支持 Unicode 的字体。

另外,在您的应用程序中使用宽字符输出,如下所示:wprintf(L"\u2660");

【讨论】:

  • 使用命令提示符。你的修复工作,但只在我的电脑上,所以这不是我要找的。不过,它肯定对其他人有用,所以谢谢你的回答。由于没有简单的解决方法,而且它在 Cygwin 中“正常工作”,我可能会放弃对 MinGW 的支持,因为截止日期是两周。
猜你喜欢
  • 2019-06-19
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多