【发布时间】:2015-06-26 23:27:04
【问题描述】:
经过 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();
非常感谢任何帮助。 谢谢!
【问题讨论】:
-
我敢打赌
type命令和你的程序一样。打开命令行窗口并发出type ASCII.txt并查看输出到控制台的内容。 -
在互联网上搜索“Microsoft 代码页”。
-
字符 165 在 UTF-8 中是非法的。最高位已设置,这意味着它是一个包含 2 个以上字节的连续字符。
-
@PaulMcKenzie 我不熟悉 type 命令,粗略的谷歌搜索只返回了预期的“typeof”和“typedef”函数的结果。我觉得你可能误读了我的问题。底部的代码部分仅用于测试实际的 ascii 值。我不打算在我的最终程序中使用它。
-
@BenSeawalker 他的意思是 DOS
type命令。
标签: c++ console-application extended-ascii