在 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
我正在尝试打印所有扩展的 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