繁体   English   中英

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

[英]C++ Printing special ascii characters to the Windows console

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

任何帮助深表感谢。 谢谢!

欢迎来到编码之苦:(

#include <iostream>
#include <windows>

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

产生:

编译执行结果

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM