c - 在 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;
}
在屏幕截图中,您可以看到此代码在 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
推荐阅读
- c# - C# 将 xml 解析为 C# 对象
- sql - 相同的记录要在 sql 中删除
- amazon-web-services - S3 传输管理器需要大量时间来上传
- javascript - django ajax 音频文件上传到views.py
- regex - 正则表达式不包括特定字符
- mysql - 在 mysql 中使用 not exist 来查找尚未分配的 ID
- .net - 是否应该将 netstandard.dll 部署到最终用户
- swift - 如何在swift 4中使用电子邮件身份验证杀死应用程序后保持登录状态
- user-interface - 运行 OMNeT++ 示例时缺少用户界面
- kubernetes - 失败错误:无法连接到任何 etcd 端点 - etcd:0/1 已连接:kubeadm