今日、キーボードで入力するA、B、Cは人間にとっては文字ですが、コンピュータにとっては単なる0と1です。
では、コンピュータはどのようにしてAが単なるランダムな数字ではなく、大文字のAを表すことを理解するのでしょうか?
答えは――ASCIIです。
ASCII
1960年代、アメリカのテレタイプ(TTY)メーカーはそれぞれ独自の「文字セット」を使用しており、互換性がなかったため、通信が困難でした。
送信するには、各文字を電気信号(0/1のパルス)に変換する必要がありました。当時の電信システムでは、文字を表すために通常5ビット(Baudotコード)または6ビット(Fielddataコード)が使用されていました。
米国規格協会(ASA、後にANSIに改称)は1963年にASCII(American Standard Code for Information Interchange)を発表しました。
ASCIIは、英語をベースにした最初の広く採用された文字エンコード規格です。7ビットの2進数で文字を表し、最大2^7 = 128個の記号を表現できます。
画像のASCII表は、縦軸と横軸の7ビットバイナリ表現を示しています。
文字の例
例えば、5のASCIIコードは次のとおりです。
まず、上のb7、b6、b5を見てください。対応する値は011です。
次に、左側のb4、b3、b2、b1を見てください。対応する値は0101です。
したがって、ASCII コード 5 は、2 進数では 011 0101、10 進数では 53 と表されます。
ASCIIとコンピュータの関係
1. コンピュータの記憶単位の起源
コンピュータのCPU、メモリチップ、バスの設計によって、一度に読み書きできる最小ビット数が決まります。
初期のマシンには、6ビットマシン(DEC PDP-6)と9ビットマシン(CDC 6600)があり、記憶単位の統一性は様々でした。
その後、8ビットが最小記憶単位として徐々に標準化されました。
理由:
-
ASCIIは8ビットに完全に収まり、残りの1ビットはパリティ/拡張に使用されます。
-
8ビットは2進数の16進数と自然に整合します(1バイト = 8ビット = 2桁の16進数)。
- メモリアライメントは非常に効率的です(バイトアドレス指定はビットアドレス指定よりもはるかに簡単です)。
その結果、ハードウェアメーカーは徐々に8ビットを最小アドレス単位(バイト)として採用するようになりました。
ASCIIは7ビットですが、これはデータを格納する際に最上位ビット(8番目のビット)が通常0で埋められることを意味します。
注: ビットはコンピュータストレージの最小単位で、0または1のみを格納でき、通常は小文字の「b」で表されます。1バイトは8ビットで、これは1つのASCII文字に相当し、通常は大文字の「B」で表されます。
2. ASCIIの歴史
1963年: ASCIIの最初のバージョンがリリースされました(7ビット、128文字)。
1968年: リンドン・ジョンソン米大統領が、すべての米国連邦政府のコンピュータにASCIIのサポートを義務付ける大統領令に署名し、ASCIIの普及を促進しました。
1970年代: IBM、DECなどの大手企業がASCIIを採用し、コンピュータと端末通信の共通言語となりました。
1981年: 拡張ASCII (8ビット、256文字) を採用したIBM PC (パーソナルコンピュータ) が発売され、ASCIIが世界に紹介されました。
拡張ASCII
1980年代、コンピュータの国際化が進むにつれ、ASCIIは英語のみをサポートし、ヨーロッパ言語、科学的記法、グリフはサポートされていませんでした。
ASCIIは7ビットのバイナリ文字のみを使用し、8番目のビットはデフォルトで0に設定されています。そのため、多くのメーカーが最上位ビットを0から1に変更し、追加の文字を定義しました。これは拡張ASCIIと呼ばれます。
拡張ASCIIは8ビットのバイナリ数値を使用して文字を表現し、最大2^8 = 256個の記号を使用できます。
ASCII ベース(0~127、ASCII と整合性あり)に 128 文字が追加されました。
-
各種言語のアクセント付き文字(é、ñ、ü)。
-
線記号および特殊グラフィック。
-
一部の数学記号。
拡張規格はメーカーによって異なります。
-
IBM PC は、スマイリーフェイス、アウトライン、ギリシャ文字などの記号を定義しています。
-
ISO は ISO 8859 シリーズ(ISO-8859-1「Latin-1」など、é や ñ などの西
ヨーロッパ文字を含む)を開発しました。
例えば、é は 233(0xE9)になる場合があります。
ç may = 231 (0xE7)。
-
MacintoshはMacRomanエンコーディングを使用します。
-
WindowsはWindows-1252エンコーディングを使用します。
したがって、拡張ASCIIは統一規格ではありません。8ビットバイトでは、最初の128ビットはASCIIと互換性がありますが、最後の128ビットは各メーカーのエンコーディングを拡張します。
Unicodeエンコーディング
ASCIIはすべての始まりでしたが、128文字しかなく、英語圏のみをカバーしていました。グローバリゼーションの進展に伴い、拡張ASCIIは「文字化け」を起こすようになりました。
-
フランス語圏のコンピュータでは、128~255文字はé、àなどに対応していました。
-
ロシア語圏のコンピュータでは、128~255文字はкириллица(キリル文字)に対応していました。
-
PCでは、128~255文字は枠線グリフに対応する可能性がありました。
メーカーによってASCIIの拡張方法が異なり、互換性がないため、同じバイト値でもコンピュータ上では全く異なる文字が表示されることがありました。
この問題に対処するため、1991年にUnicodeコンソーシアムが設立され、1991年から1992年にかけてUnicode 1.0仕様がリリースされました。世界中のほぼすべての文字記号(現在100万文字以上)を網羅し、世界的に統一された文字セットを定義し、各文字に固有のコードを割り当て、ASCII範囲(0~127)と完全に互換性があるため、歴史的な互換性が確保されています。絵文字、中国語、アラビア語なども含まれます。
例えば、😊 = U+1F60A です。U+ は Unicode のコードポイントを示し、1F60A は 16 進数で、10 進数に変換すると 128522 になります。
UTF-8 では 4 バイトになります。
注: UTF-8 は Unicode の実装です。UTF-16 と UTF-32 も存在します。
概要
ASCII は最初のコンピュータ文字規格であり、これによりマシンは A~Z、0~9、句読点、制御文字を理解できるようになりました。
ASCII は 7 ビットのバイナリを使用し、128 文字を表現できます。拡張 ASCII は 8 ビットのバイナリを使用し、最大 256 文字を表現できますが、国やメーカーによって定義が異なります。Unicode は拡張 ASCII の非互換性を統一しました。
ASCII は現代のエンコードの基礎を築き、今日の Unicode でも重要な役割を果たしています。
次にコンピューターに「A」と入力するときは、次の点に注意してください。コンピューターにとって、これは実際には 0100 0001 に過ぎません。
拡張グラフィックス
ASCIIコード
拡張ASCII
参考記事
1、ASCII – 维基百科:https://en.wikipedia.org/wiki/ASCII
2、林登·约翰逊:https://zh.wikipedia.org/zh-cn/%E6%9E%97%E7%99%BB%C2%B7%E7%BA%A6%E7%BF%B0%E9%80%8A
3、Teleprinter:https://en.wikipedia.org/wiki/Teleprinter
4、Unicode:https://zh.wikipedia.org/zh-cn/%E7%BB%9F%E4%B8%80%E7%A0%81