为什么 setlocale 给我?而不是普通的字母?

Why does setlocale give me ? instead of normal letters?

编程语言:C

IDE:代码块

编译器:GNU GCC 编译器

OS: Windows 7

我的 cmd 默认为代码页 852,所以我决定使用 setlocale(),使用

将其设置为代码页 437
setlocale(LC_ALL, "English_United States.437")

但这样做会使某些 letters/symbols 显示为“?”反而。有什么办法可以解决这个问题?

注意 ASCII table 的非扩展字符从 0 到 127,要处理扩展字符使用 wchar_t

#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main(void)
{
    wchar_t c;

    setlocale(LC_ALL, "English_United States.437");
    for (c = 32; c < 256; c++) {
        wprintf(L"%lc\n", c);
    }
    return 0;
}

所以我找到了 2 个解决方案。

1。 您可以在控制面板下更改系统默认代码页,但需要重新启动计算机并且非常不切实际,但您可以使用光栅字体。

2。 使用 "system("chcp 437");"会将代码页设置为 437,但是您需要使用 "Lucida Console" 之类的字体来将 characters/symbols 显示为光栅字体,如果更改代码,由于某种原因无法正确打印 characters/symbols这样的页面。