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

时间:2018-11-16 13:36:38

标签: c locale codepages setlocale codepage-437

编程语言:C

IDE:代码块

编译器:GNU GCC编译器

操作系统:Windows 7

我的cmd默认为代码页852,所以我决定使用setlocale()来使用以下命令将其设置为代码页437

setlocale(LC_ALL, "English_United States.437")

但是这样做会使某些字母/符号显示为'?'代替。有什么办法解决吗?

2 个答案:

答案 0 :(得分:0)

请注意,ASCII表的非扩展字符从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;
}

答案 1 :(得分:0)

所以我找到了两种解决方案。

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

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