【发布时间】:2017-05-28 05:21:55
【问题描述】:
我做了一个程序,在运行过程中在屏幕上打印公交车站的名称,这些名称通常包含重音字符。我做了一个对我和我的朋友在 Visual Studio '13 和 '15 上都很好用的解决方案,但我纠正程序的老师回答说它对他不起作用。文件NULL 位于包含代码的文件夹中。
我用这个:
setlocale(LC_ALL, "");
system("chcp 1250 > NULL");
printf("Mária Terézia körút\n");
我的问题:如何让程序在每个编译器和操作系统上显示重音字符?
【问题讨论】:
-
这是一个棘手的领域,但
chcp不是大多数基于 Unix 的系统上的程序,因此对于“每个编译器和操作系统”来说,这不是一个初学者。您可能应该澄清“每个编译器和操作系统”的含义。简单的事实是,您可能无法使其适用于每个 编译器和操作系统——周围有太多过时的仍在使用并且不支持不同的代码集。幸运的是,它们大多没有广泛用于服务器或台式机/笔记本电脑系统。您需要知道终端(控制台)使用的代码集,并确保区域设置正确。 -
嗯,在答案中,老师建议我在 Win 7/8/10 上测试,但我在发送之前已经在 7 和 10 上进行了测试。如果我可以记录如果它不工作必须更改的内容,这也是一个解决方案。在 Code::Blocks 上,它既不为我显示字符(GNU 编译器),所以我在想他是否没有使用 Visual Studio,尽管它也在学校用于考试。
-
好的——这是对“所有编译器和操作系统”的不同解释,与我的预期不同。 (我将 macOS、Linux、BSD、Solaris、AIX、HP-UX 归为“所有编译器和 o/s”标题下的操作系统。)我无法为您提供进一步的帮助 — 除了通过意外或必要时(有人让我可以使用 Windows 机器;我自己或工作中没有 Windows 机器)。
-
好的,还是谢谢你。
-
在所有编译器上没有任何作用。即使在理论上,此特定功能也不适用于所有符合标准的编译器。该标准不要求任何特定字符的字符可以正确显示在控制台上,也不要求您的程序使用所需的字符集需要做什么。
标签: c display non-ascii-characters