C++ 将特殊 ascii 字符打印到 Windows 控制台

问题描述 投票:0回答:2

经过 2 个小时的搜索和尝试各种方法后,我正在绞尽脑汁地尝试将特殊的 ASCII 字符打印到控制台! (C++)

typedef unsigned char UCHAR;

int main()
{
  UCHAR c = '¥';
  cout << c;

  return 0;
}

为什么此代码打印 Ñ (209) 而不是 ¥ (165)???

我已经尝试过:

SetConsoleCP(CP_UTF8);
SetConsoleOutputCP(CP_UTF8);

但无论我传递给它哪个值,似乎都没有做任何事情。

还有人建议需要通过注册表更改控制台的字体。但这太荒谬了。我不希望我的最终用户仅仅为了运行我的程序而开始更改注册表值...

真正奇怪的是,如果我将所有 ascii 字符打印到文件中(使用 ofstream),它们会在记事本和 Visual Studio 编辑器(2012 professional)中正确显示。

ofstream file("ASCII.txt");;
if (file.is_open())
{
    UCHAR c = 0;
    for (int i = 0; i < 256; i++)
    {
        c++;
        file << c << "\t|\t" << (int)c << endl;
    }
}
file.close();

非常感谢任何帮助。 谢谢!

c++ console-application extended-ascii
2个回答
3
投票

欢迎体验编码的痛苦:(

#include <iostream>
#include <windows>

int main() {
    SetConsoleCP(437);
    SetConsoleOutputCP(437);
    std::cout << (char)157 << "\n";
}

生成:

Compilation and execution result

问题是您的源文件在 CP437 中不是,因此该字符的值与您尝试打印的字符不同(正如您所指出的,源文件中的值是 165,这是 CP437 中的不同字符) .

https://en.wikipedia.org/wiki/Code_page_437


0
投票

我有一个适用于 MSVS 上次更新的代码。 代码,打印特殊字符,由 u8"\uxxxx..." 或 u8"Uxxxxxxxx..." 或最后 u8"😀" 输入,其中 😀 是通过复制/粘贴在源代码中输入的。

© www.soinside.com 2019 - 2024. All rights reserved.