如何在cmd窗口中输出特殊字符?

时间:2016-11-05 22:59:15

标签: c cmd

一旦我编写了ac程序并尝试在Windows 10的cmd窗口上输出printf()的特殊字符(如äöüß),它只显示像▒▒▒▒▒▒▒▒▒▒▒▒< / p>

但是,如果我只是在没有执行c程序的cmd窗口中键入它们,它会正确显示这些字符。 当我在netbeans中将控制台类型更改为标准输出时,输出也是正确的。 我试图更改cmd的代码页,但它没有解决问题。 我使用gcc c编译器。

2 个答案:

答案 0 :(得分:2)

这是处理printf的方式,默认情况下printf 打印ascii字符,如a,a&#39; s,这里是维基百科文章的链接{ {3}},要打印其他语言的特殊字符/字符,请使用此选项,将您的字符串替换为您要打印的文字

printf(L"your string");

简而言之,在字符串前添加前缀L,大写字母L以打印特殊字符。

希望它能帮助mukund2003

答案 1 :(得分:2)

原因是使用不同的代码页进行字符编码。

在GUI文本编辑器中编写存储在文件中的程序代码,每个字符只用一个字节编码,代码页Windows-1252用于西欧和北美国家。

在运行控制台应用程序时打开的控制台窗口中,使用的是OEM代码页,该代码页位于西欧国家OEM 850和北美国家OEM 437

因此,您需要在代码中编写ÄÖÜäöüß个不同的字节值,以便在控制台窗口中按预期显示这些字符,至少在西欧和北美国家执行时。

Character    Windows-1252    OEM 850
    Ä             \xC4         \x8E
    Ö             \xD6         \x99
    Ü             \xDC         \x9A
    ä             \xE4         \x84
    ö             \xF6         \x94
    ü             \xF1         \x8C
    ß             \xDF         \xE1

通过打开命令提示符窗口并运行显示活动代码页的chcp(更改代码页)或mode,可以看到控制台窗口中默认使用的代码页。 / p>

用户帐户的计算机上的GUI应用程序和控制台应用程序的默认代码页取决于此用户帐户的Windows区域和语言设置。

您应该阅读一些网页以更好地理解字符编码:

程序员不应该将非ASCII个字符写入由编译的可执行文件输出的字符串中,因为它取决于编译器在创建可执行文件中字符的二进制表示(字节)时使用的代码页。在输出字符串之前,当应用程序执行应用程序的活动代码页时,最好使用十六进制表示法。

还可以在Unicode中将字符串存储在可执行文件中,在输出任何字符串之前确定输出句柄的编码,并在将字符串写入输出句柄之前将每个Unicode字符串转换为输出句柄的编码。 / p>

当然,这取决于使用的输出字体,可执行文件中字符串中的字节最终是如何真正显示在屏幕上的。