【问题标题】:How to print MACRON/Unicode in Windows Console如何在 Windows 控制台中打印 MACRON/Unicode
【发布时间】:2019-03-01 12:58:23
【问题描述】:

所以目前我最近经常使用 Unicode。 我见过其他人面临同样的问题,但到目前为止还没有答案能解决我的问题。

目前的目标是能够在我的 Windows 控制台窗口中打印:¯。 这个字符叫做“MACRON”,它的Unicode编号是U+00AF。

一开始我简单写了:cout << "some irrelevant text lorem ipsum etc... \u00AF" << endl;

但这最终让我适得其反,Windows 控制台窗口显示一个奇怪的难以形容的丑陋(无冒犯)看起来 T。

我也尝试过使用 wcout wcout << L"some more irrelevant text lorem ipsum etc... \u00AF" << endl; 但结果是一样的。

关于为什么我的源代码/控制台窗口无法打印 MACRON 字符有什么想法吗?

修复这个字符很好,但总的来说我会遇到越来越奇怪的 Unicode 字符,所以我可能需要更广泛的适用解决方案无需下载/更改源代码之外的任何内容。

在 Code::Blocks 17.12 IDE 中使用 C++ 编程

【问题讨论】:

  • 传统的 Windows 控制台不擅长 Unicode。不过,它可能很好地显示了当前选定代码页中的扩展 ASCII 和字符。而0x00AF 属于 Windows 上常用的扩展 ASCII 范围。你的语言环境设置是什么?使用什么代码页?
  • 区域设置到底是什么意思? Windows的本地设置?代码块? C++?。你的意思是我当前的字符集对吗? UTF-9 虽然我觉得你的意思是 windows char-list 但我不能说小细节

标签: c++ unicode character-encoding console-application codeblocks


【解决方案1】:

使用_setmode(..., _O_U16TEXT);

#include <io.h>
#include <fcntl.h>

...

_setmode(_fileno(stdout), _O_U16TEXT);
std::wcout << L"\u00AF\n";

请务必阅读文档页面上的注意事项,以确保您对使用它的权衡感到满意(例如,普通的 printf 将不再在该模式下工作):

https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setmode?view=vs-2017

【讨论】:

  • 谢谢。我遇到了奇怪的错误:“_fileno”没有在这个范围内声明”。我错过了什么吗?
  • @StellarEquilibrium 添加#include &lt;stdio.h&gt;
  • 模式(u16text..)也没有声明,所以我将其更改为“,0x00020000”并且程序启动虽然现在控制台是空的,我在某处读到你需要更改字体到 lucidia 控制台哪个 obv。不会像问题中描述的那样发生
  • 对不起,它对我来说开箱即用(windows10,vs2017)。不知道你有什么不同。
  • 另外,Lucinda 的建议看起来……陈旧。如果它仍然适用于更现代的操作系统,我会感到非常惊讶。没有实际的知识。
猜你喜欢
  • 1970-01-01
  • 2012-03-11
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
相关资源
最近更新 更多