2

我正在尝试使用下面的代码打印所有 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);
    }
}
4

2 回答 2

7

ASCII 是 7 位代码。高于 128 的字节值的解释取决于操作系统、您的区域设置/语言设置等。它们不是标准的。在英文的Windows下,它们最常被CP1252定义;在 Linux 上,它们更常见的是 ISO-8859-1。一些操作系统使用 UTF-8,它本身不是字符集,而是一种通过对大多数字符使用多个字节将 Unicode 编码为 8 位流的方法。如果你真的需要使用标准 ASCII 32-126 之外的字符,你真的应该使用宽字符和语言环境的东西。

顺便说一句,字符 127 是一种特殊情况:它是控制字符“rubout”,表示已擦除的数据。(这样做是为了可以通过打孔所有的孔来擦除一段纸带!--是的,我们中的一些人已经足够大,可以记住纸带)。

于 2013-05-03T12:57:23.003 回答
0

您可能想查看 setlocale。我不知道您要查找哪组字符,但您可以尝试setlocale (LC_ALL,"");设置打印的字符以匹配环境(这似乎符合您的要求,因为复制粘贴有效)。

于 2013-05-03T12:55:15.517 回答