【问题标题】:How to output low ASCII using C++ in Windows 10?如何在 Windows 10 中使用 C++ 输出低 ASCII?
【发布时间】:2019-11-22 18:31:32
【问题描述】:

我正在尝试在 Windows 10 上使用 C++ 为简单的蛇游戏输出方向箭头。但是,使用此表作为参考:

ASCII reference

我得到的只是控制台中的这个小问号:

Tiny question mark

我想输出符号 16、17、30 和 31。我不是程序员,所以这可能是一些基本错误,但有些符号确实有效,而另一些则导致上面的符号。

一个小例子:

void showSnake() {
    char snakeHead;
    snakeHead = 31;
    cout << snakeHead; //THIS SHOWS THE TINY QUESTION MARK
    snakeHead = 62;
    cout << snakeHead; //THIS SHOWS THE ">" SYMBOL
}

【问题讨论】:

  • 尽可能使用 Unicode 字符。尽管有相反的一般假设,但那不是 ASCII,那是 DOS ANSI
  • 我不知道你从哪里得到这个参考,但它不是 ASCII
  • 按 Alt+Space > 属性 > 字体选项卡。您需要选择一种旧的光栅字体。
  • 这是 ASCII 的一种变体,称为 Not ASCII(或 OEM 437)。
  • ASCII 中没有箭头。您正在查看的“参考”是一个谎言。

标签: c++ windows ascii iostream


【解决方案1】:

你应该使用 Unicode,你会有更多的字符选择。

https://en.wikipedia.org/wiki/List_of_Unicode_characters 上,我发现了这个符号“▶”,它看起来与您想要使用的相似。

它的unicode值是U+25BA,这意味着你可以在C++中创建一个值为'\u25BA'的字符。

但实际上,该值会超出 char 类型的范围,因此您必须使用宽字符 (wchar) 才能完成工作。

根据this 的回答,您还应该使用 C 运行时库中的_setmode 函数(请参阅here)在标准输出中切换对 Unicode 字符的支持。

#include <iostream>
#include <io.h>

int main() {
     _setmode(_fileno(stdout), _O_U16TEXT);
     std::wcout << L'\u25BA';
}

setlocale() 行是为了防止默认语言环境不支持非 ACSII 输出(我的机器上不支持)。

【讨论】:

  • “你应该使用 Unicode”。让我们先让微软使用 Unicode,好吗?或 C++。在 C++ 中处理 Unicode 是专家的任务。
  • @n.'pronouns'm。这取决于一个人想走多远。在这种情况下,根本不是很远。
  • 谢谢,但我在我的视觉工作室尝试过,但没有显示任何内容。我注意到您错误地将“u”放在“\”前面,即使将其更改为正确的顺序,我的控制台中也没有显示任何内容。尝试使用和不使用“setlocale”行。有什么想法吗?
  • 对于带有 VC++ 的 Windows,如果 stdout 是一个控制台文件(例如 GetConsoleMode(_get_osfhandle(_fileno(stdout)), &amp;mode) 成功),那么我们应该通过 _setmode(_fileno(stdout), _O_U16TEXT) 将低 I/O C 文件描述符模式切换为 UTF-16。这避免了 mojibake 编码到控制台的输出代码页,通常是 OEM(例如美国代码页 437)。
  • 在 Windows 8 及更高版本中,通过SetConsoleOutputCP(CP_UTF8) 也可以将控制台输出代码页更改为 UTF-8 (65001) 并使用 UTF-8 字节字符串而不是宽字符串,但这是一个旧版本的 Windows 完全一团糟。在包括 Windows 10 在内的所有版本中,通过 SetConsoleCP 将输入代码页设置为 UTF-8 仍然存在问题(仅限于 7 位 ASCII)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 2017-12-24
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多