经过 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();
非常感谢任何帮助。 谢谢!
欢迎体验编码的痛苦:(
#include <iostream>
#include <windows>
int main() {
SetConsoleCP(437);
SetConsoleOutputCP(437);
std::cout << (char)157 << "\n";
}
生成:
问题是您的源文件在 CP437 中不是,因此该字符的值与您尝试打印的字符不同(正如您所指出的,源文件中的值是 165,这是 CP437 中的不同字符) .
我有一个适用于 MSVS 上次更新的代码。 代码,打印特殊字符,由 u8"\uxxxx..." 或 u8"Uxxxxxxxx..." 或最后 u8"😀" 输入,其中 😀 是通过复制/粘贴在源代码中输入的。