【问题标题】:Print (and store) high ASCII character (╔) in C++ in console在控制台中以 C++ 打印(并存储)高位 ASCII 字符(╔)
【发布时间】:2020-01-14 14:56:32
【问题描述】:

我正在用 C++ 编写一个小程序,我想将这个字符存储在一个变量中:。但是,我只能在字符串中执行此操作,如果我使用 ' 表示法,它只会显示:

有什么我可以做的吗?

顺便说一句,我使用:

  • Linux(薄荷)
  • Visual Studio Code(集成终端)

如果我使用" 表示法,控制台会正确显示字符,所以可能不是控制台本身的问题。

【问题讨论】:

  • 非标准字符是非标准的。在您的系统使用的编码中,该字符可能不适合单个字符。
  • 不是 ASCII 字符。它是 U+2554 您可能将其存储为 UTF8,在这种情况下,它存储为 3 个字节:0xE2 0x95 0x94
  • 虽然你没有使用 ASCII 操作系统,Linux 通常是 UTF-8,所以你需要打印 Ted 提到的 3 个字节以获得正确的字符
  • 好的,那么我会找到一种方法来使用字符串而不是我猜的字符
  • ASCII 只能保证到代码 127。更高的代码是竞争标准的狂野西部领域。

标签: c++ character-encoding ascii non-ascii-characters


【解决方案1】:

您可以使用十六进制表示法:

  char border = '\xcd';

小程序:

#include <iostream>
using std::cout;
using std::cin;

int main()
{
  cout << "border: \xcd\n";

  const char corner = '\xc9';
  cout << "Upper left corner: " << corner << "\n";

  cout << "Paused.  Press ENTER to continue.\n";
  cin.ignore(100000, '\n');

  return 0;
}

有许多图表显示了扩展的 ASCII 编码。使用所需字符的十六进制值。

这是来自 Wikipedia 的关于 DOS extended ASCII table 的图表。

【讨论】:

  • CP850 也是一个“DOS 扩展 ASCII”。术语“扩展 ASCII”几乎从不够精确到有用。
  • @Volper 您、您的源代码编辑器和编译器是否同意您使用的源字符编码?是哪个?
  • 我的编辑器和控制台使用 UTF-8,不确定编译器(我使用 g++),但如果自定义字符在字符串中,则效果很好。我认为这是因为 char 类型不支持超过 1/2 字节,这就是单引号不起作用的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 2014-04-23
相关资源
最近更新 更多