经过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();
非常感谢任何帮助。 谢谢!
答案 0 :(得分:2)
欢迎编码的痛苦:(
#include <iostream>
#include <windows>
int main() {
SetConsoleCP(437);
SetConsoleOutputCP(437);
std::cout << (char)157 << "\n";
}
生成:
问题是您的源文件在CP437中不,因此该字符的值与您尝试打印的值不同(如您所知,源值为165,是CP437中的另一个角色。