2013-05-03 85 views
1

我想下面的代碼來打印所有的ASCII字符,但它不打印127到160的任何東西。我知道他們是控制字符集或一些拉丁/西班牙字符。如果從Windows粘貼相同的字符,它會在unix中打印出來。爲什麼不通過C程序?如何通過C程序打印擴展ASCII字符127到160 in?

#include <stdio.h> 

int main() 
{ 
    int i; 
    char ch; 

    for(i = 0; i < 256; i++) 
    { 
     printf("\n%03d %02x %02c",i ,i ,i); 
    } 
} 
+0

更改您的終端字符集從utf8到iso-8859-15,看看會發生什麼 – 2013-05-03 12:54:32

+0

ascii表從0到127,128到255是擴展代碼,所以我猜printf只支持默認的ascii代碼。 – 2013-05-03 13:04:44

+0

@DavidRF如何更改終端中的字符集?我正在使用膩子。 – CodeCodeCode 2013-05-03 13:05:04

回答

0

你可能想看看setlocale。 我不知道你正在尋找哪組字符,但你可以嘗試setlocale (LC_ALL,"");來設置你的打印字符以匹配環境(這似乎符合你的要求,因爲複製粘貼工作)。

6

ASCII是一個7位代碼。字節值高於128的解釋取決於操作系統,您的語言環境/語言設置等。他們不是標準的。在英語的Windows下,它們通常由CP1252定義;在Linux上它們更常見的是ISO-8859-1。有些操作系統使用UTF-8,它本身不是字符集,而是通過對大多數字符使用多個字節將Unicode編碼爲8位數據流的一種方法。如果你真的需要使用標準ASCII 32-126以外的字符,你應該使用寬字符和區域設置。

順便說一下,字符127是一種特殊情況:它是控制字符「擦除」,表示擦除數據。 (這樣做是爲了讓一部分紙帶可以通過打出所有的孔來擦除! - 是的,我們中有些人的年齡已經足以記住紙帶了)。

+0

+1記住紙帶:P – 2013-05-03 13:05:14

+0

@Lee +1以紀念這個記憶芯片時代的紙帶。 – CodeCodeCode 2013-05-03 13:09:47