如何通过C程序打印127到160的扩展ASCII字符?

时间:2013-05-03 12:42:27

标签: c ascii extended-ascii

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

2 个答案:

答案 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,"");设置您的打印字符以匹配环境(这似乎符合您的要求,因为复制粘贴有效)。