首页 > 解决方案 > 在 C、Linux 中打印扩展的 ASCII 字符

问题描述

我试图打印所有扩展的 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 中的结果。我知道问题出在编码上,但我不知道如何解决。

标签: clinuxcodepages

解决方案


好的,一切都很好。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

推荐阅读