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 を超えるバイト値の解釈は、OS、ロケール/言語設定などに依存します。それらは標準ではありません。英語の Windows では、CP1252 によって最も一般的に定義されています。Linux では、より一般的には ISO-8859-1 です。一部の OS は 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 に答える