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

标签 c cmd

一旦我编写了一个 c 程序并尝试在 Windows 10 的 cmd 窗口中使用 printf() 输出特殊字符(如 ä ö ü ß),它只显示像 ▒▒▒▒▒▒▒▒▒▒▒▒

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

最佳答案

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

在 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 来查看控制台窗口中默认使用的代码页事件代码页。

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

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

程序员不应该写非ASCII字符转换为已编译可执行文件输出的字符串,因为它取决于编译器在创建可执行文件中字符的二进制表示(字节)时使用的代码页。如果在输出字符串之前应用程序执行的事件代码页已知或由应用程序定义,则最好使用十六进制表示法。

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

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

关于c - 如何在cmd窗口输出特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40444151/

相关文章:

c - 在 ADC 中断中使用移位和数组求平均值

windows - 尝试将 altkey 保存到 CMD 或 BAT 文件

batch-file - 在cmd中关闭程序的计时器

windows - 使用Windows在所有目录中递归执行命令

windows - 使用 BATCH (cmd) 获取 DNS 解析时间

使用堆栈标记连接的组件

c++ - 在 C++ 中省略 void 作为函数结果

c - 如果 realloc 返回 NULL,我是否必须释放旧内存?

c - 你在 C 语言中犯过的最危险的编程错误是什么?

windows - 如何替换 Windows 批处理文件中的变量内容