Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C、Linux中打印扩展ASCII字符_C_Linux_Codepages - Fatal编程技术网

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

在C、Linux中打印扩展ASCII字符,c,linux,codepages,C,Linux,Codepages,我正在尝试打印所有扩展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(

我正在尝试打印所有扩展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;
}
#包括
#包括
#包括
#包括
内部主(空){
wchar_t c;
setlocale(LC_ALL,“C”);
用于(c=128;c<256;c++){
wprintf(L“字符数%d:%lc\n”,c,c);
}
printf(“\n%s\n”,setlocale(0,NULL));
std::cin.get();
std::cin.get();
返回0;
}
此代码在VS 2017的windows中运行。


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

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

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

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

export LANG=pl_PL.ISO-8859-1
或者,由于您的语言似乎是波兰语,ISO-8859-2可能更合适:

export LANG=pl_PL.ISO-8859-2

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

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

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

export LANG=pl_PL.ISO-8859-1
或者,由于您的语言似乎是波兰语,ISO-8859-2可能更合适:

export LANG=pl_PL.ISO-8859-2

考虑GNOME终端的设置吗?Linux中的$LangEngor变量的值是什么?这个程序是C++的,而不是C。代码是好的,问题是你的终端/程序用来显示(它不支持扩展ASCII当使用宽字符)。Windows使用了支持扩展ASCII的代码,C++代码是WINPINTFF 。Lang= PLAL PLUT8,终端字符编码是UnoDeE-UTF8。@ KAMILCK如何修复它?考虑GNOME终端的设置吗?Linux中的$LangEngor变量的值是什么?这个程序是C++的,不是C的。代码是可以的,问题在于用于显示的终端/程序(使用宽字符时不支持扩展ascii)。Windows使用的编码不支持扩展ascii和
wprintf
。LANG=pl\u pl.UTF-8,终端字符编码是UNICODE-utf8。@KamilCuk如何修复它?@magnus250:运行
sudo localedef-f ISO-8859-2 pl\u pl.ISO-8859-2
定义波兰ISO-8859-2语言环境,然后重试。它会起作用的。除Microsoft外,所有人基本上都已迁移到UTF-8语言环境,这就是为什么默认情况下Linux机器上没有安装ISO-8859-2变体,您需要自己安装它来复制Windows行为。@NominalAnimal我这样做。当我在控制台中输入locale时,我得到LANG=pl\u pl.ISO-8859-2,但这段代码仍然不起作用:(。好的,我会做所有提示。我使用printf(“%d-\%c\n,I,I”)打印所有扩展的ascii,它可以工作。谢谢:)@magnus250:运行
sudo localedef-f ISO-8859-2 pl_pl pl_pl.ISO-8859-2
来定义波兰ISO-8859-2语言环境,然后重试。它会起作用的。除了Microsoft之外的所有人基本上都已迁移到UTF-8语言环境,这就是为什么默认情况下Linux机器上没有安装ISO-8859-2变体的原因,您需要自己安装它来复制e Windows行为。@我这样做。当我在控制台中放置区域设置时,我得到LANG=pl\u pl.ISO-8859-2,但这段代码仍然不起作用:(。好的,我做所有提示。我使用printf(“%d-\%c\n,I,I”)来打印所有扩展的ascii码,它可以工作。谢谢:)