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

时间:2015-06-26 23:27:05

标签: c++ console-application extended-ascii

经过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专业版)中正确显示。

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();

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

1 个答案:

答案 0 :(得分:2)

欢迎编码的痛苦:(

#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