为什么 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这样的页面。
编程语言:C
IDE:代码块
编译器:GNU GCC 编译器
OS: Windows 7
我的 cmd 默认为代码页 852,所以我决定使用 setlocale(),使用
将其设置为代码页 437setlocale(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这样的页面。