在 C 中打印扩展 ASCII 字符,Linux

Print extended ASCII char in C, Linux

我正在尝试打印所有扩展的 ASCII 字符。我在论坛上找到了一个代码:

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

int main(void) {
    wchar_t c;
    setlocale(LC_ALL, "C");

    for (c = 128; c < 256; c++) {
        wprintf(L"char nr %d: %lc\n", c, c);
    }
    printf("\n%s\n", setlocale(0, NULL));

    std::cin.get();
    std::cin.get();
return 0;
}

此代码在 VS 2017 中的 windows 中有效。

在屏幕截图中,您可以在 windows 和 Linux 中看到此代码的结果。我知道问题出在编码上,但我不知道如何解决它。

好的,一切都很好。 ASCII 字符限制在 128 以下。以上取决于实际字符集。

在 Linux 中,您显示的是 ISO-8859-1(又名 Latin1)字符集的子集,而在 Windows 中,您显示的是 Windows 代码页 850 . 当你在 Linux 上声明一个 UTF8 字符集时,你应该只显示错误字符,但你的终端似乎将一些字节解释为 latin1.

如果要显示所有Latin1字符,只需更改LANG环境变量:

export LANG=pl_PL.ISO-8859-1

或者您的语言似乎是波兰语,ISO-8859-2 可能更合适:

export LANG=pl_PL.ISO-8859-2