我正在尝试下面的代码来打印所有的ASCII字符,但它不会打印127到160的任何内容。我知道它们是控制字符集或一些拉丁/西班牙字符。如果从Windows复制粘贴相同的字符,则它在unix中打印得很好。为什么不通过C程序?
#include <stdio.h>
int main()
{
int i;
char ch;
for(i = 0; i < 256; i++)
{
printf("\n%03d %02x %02c",i ,i ,i);
}
}
答案 0 :(得分:7)
ASCII是一个7位代码。字节值大于128的解释取决于操作系统,语言环境/语言设置等。它们不是标准的。在英文版的Windows下,它们最常由CP1252定义;在Linux上,它们通常是ISO-8859-1。有些操作系统使用UTF-8,它不是字符集本身,而是通过对大多数字符使用多个字节将Unicode编码为8位流的方法。如果你真的需要使用标准ASCII 32-126之外的字符,你应该使用宽字符和区域设置。
BTW,字符127是一种特殊情况:它是控制字符“rubout”,表示擦除数据。 (这样做是为了通过打孔所有孔来擦除一部分纸带! - 是的,我们中的一些人已经足够记住纸带了。)答案 1 :(得分:0)
您可能想要查看setlocale。
我不知道您正在寻找哪一组字符,但您可以尝试setlocale (LC_ALL,"");
设置您的打印字符以匹配环境(这似乎符合您的要求,因为复制粘贴有效)。