ASCIIテーブル:128個の数字がテキストの基盤になるまで
ASCIIはAmerican Standard Code for Information Interchangeの略で、コンピューターが「文字とは何か」について合意するための符号化です。1963年に公開され1960年代を通じて改訂されたASCIIは、英語テキストの基本文字・数字・いくつかの制御信号を、機械が保存・伝送できる数値に対応付けています。大文字のAキーを押すと、コンピューターは文字の形ではなく数字65を保存します。ASCIIはその数字があらゆる場所でAを意味することを保証する対応表です。
この規格は非常にコンパクトです。ASCIIは7ビットコードであり、各文字が7つの2進数の桁に収まり、全体のレパートリーはちょうど2の7乗、つまり0から127まで128個の異なるコードポイントにわたります。この簡素さは意図的なものでした。初期のテレタイプ機やモデムは低速かつ高価だったため、すべてのビットが重要でした。7ビットはアルファベットの大文字・小文字・10桁の数字・一般的な句読点・デバイスの同期を保つ制御文字をすべてカバーするのに十分で、8ビット目は多くのシステムでエラーチェックのために使われました。

2つの領域:制御文字と印刷可能文字
テーブルはきれいに2つの領域に分かれています。コード0から31まで、そしてコード127(DEL)が制御文字です。これらは画面にグリフを表示しません。代わりにデバイスへの命令を送ります。コード9は水平タブ、コード10は改行(次の行へ移動)、コード13はキャリッジリターン、コード7はかつてターミナルを鳴らしていたベルです。合計33個のシグナルコードが存在し、多くは今日では歴史的な遺産ですが、改行・キャリッジリターン・タブは現在もテキストファイルのフォーマットに不可欠です。
コード32から126までが印刷可能文字で、合計95個あります。コード32はスペースで、何も表示しませんがカーソルを進めるため印刷可能として扱われます。そこから句読点と記号、コード48から57の数字0から9、コード65から90の大文字AからZ、コード97から122の小文字aからzが続きます。このレイアウトから整然とした性質が生まれます。同じ文字の大文字と小文字は正確に32だけ異なるため、1ビットを反転させるだけで大文字小文字を変換できます。これらの規則性は偶然ではなく、単純な算術でソートや大文字小文字変換ができるよう設計されたものです。
10進数、16進数、2進数:1つの数字の3つの見方
すべてのASCIIコードは単なる数字であり、3つの方法で表記されます。10進数は日常的な基数10の形式で、Aは65です。16進数(基数16)はバイトと一致するためプログラマーがよく使い、Aは0x41で、印刷可能な範囲は0x20から0x7Eです。2進数(基数2)はハードウェアが実際に保存する形式で、Aは7ビットにわたって1000001です。同じ文字、3つの表記法。メモリダンプやネットワークトラフィックを読む際、これらの変換をすらすらこなすのは基本的なスキルです。これらの変換を頻繁に使う場合は、speedor.netの参照テーブルにすべての対応表をまとめています。

ASCIIが今も重要な理由
ASCIIを歴史として分類するのは誤りです。コードに触れる人の日常業務に生きています。プログラミング言語はバイトレベルで文字列リテラル・ソースファイル・プロトコルキーワードをASCIIとして扱います。HTTPヘッダー・SMTP・多くの設定ファイル形式などのネットワークプロトコルは、人間が読めるようASCIIで定義されています。文字列が壊れて見える場合、開発者はhexビューアーを使ってASCIIテーブルと照合しながら迷い込んだ制御文字や誤った行末を探します。URLエンコード・Base64・エスケープシーケンスはすべてASCIIの値を基礎としています。エンコードのバグをデバッグする人にとって、開発者ツールの横に手軽な参照があれば、謎のバイトが明白な答えに変わります。
ASCIIからUnicodeとUTF-8へ
ASCIIは英語を完璧に扱いましたが、それ以外はほとんど扱えませんでした。128文字の上限では、アクセント付き文字・キリル文字・中国語・アラビア語・絵文字を収めることができません。Unicodeはあらゆる文字体系のすべての文字に固有の番号(コードポイントと呼ばれる)を割り当てることでこれに答え、現在では10万個を超えています。重要なのは、Unicodeは文字のカタログであり保存形式ではないため、コードポイントをバイトに変換するエンコーディングが必要です。
UTF-8がそのエンコーディングであり、ASCIIが実質的に消えなかった理由です。UTF-8は1文字あたり1から4バイトを使用し、コードポイント0から127(ASCII全範囲)をプレーンASCIIと同一の1バイトに格納するよう設計されています。これによりUTF-8は完全な後方互換性を持ちます。有効なASCIIファイルはすべて有効なUTF-8ファイルです。127を超える文字は追加のバイトを使います。このエレガントな互換性がUTF-8をウェブの圧倒的多数を占めるエンコーディングにした大きな理由です。要約すると、ASCIIは元々の128文字のコア、Unicodeはそれを内包する普遍的なカタログ、UTF-8はASCIIテキストをバイト単位でそのままに保ちながら両方を運ぶエンコーディングです。
よくある質問
ASCIIテーブルには何文字ありますか?
標準ASCIIは0から127まで番号付きの128文字を定義しています。そのうち95文字がスペースを含む印刷可能文字で、33文字はグリフを表示せずデバイスに信号を送る制御文字です。
制御文字と印刷可能文字の違いは何ですか?
制御文字(コード0から31と127)は改行やタブなどの動作をデバイスに命令し、目に見えるグリフを表示しません。印刷可能文字(コード32から126)は画面に実際に表示される文字・数字・句読点とスペースです。
なぜASCIIは7ビットコードなのですか?
7ビットはちょうど128通りの組み合わせを与え、英語の文字・数字・句読点・制御信号をカバーするのに十分でした。初期のハードウェアの低速な帯域幅を節約しながら、バイトの8ビット目はパリティエラーチェックのために確保されることが多かったです。
文字AのASCIIコードは何ですか?
大文字Aは10進数65、16進数0x41、2進数1000001です。小文字aは10進数97で、正確に32多い値です。これは単純な算術で大文字小文字変換ができる組み込みのパターンです。
ASCIIとUnicodeは同じですか?
いいえ。ASCIIは128文字をカバーし、Unicodeはあらゆる文字体系にわたる10万個以上の文字を収録しています。ASCIIは事実上Unicodeの最初の128コードポイントであり、より大きな規格の小さなサブセットです。
UTF-8はASCIIとどのような関係にありますか?
UTF-8はUnicodeのエンコーディングで、コードポイント0から127をASCIIと同一の1バイトに格納します。これによりすべてのASCIIファイルが有効なUTF-8ファイルとなり、UTF-8が後方互換性を持ち現代のウェブを席巻している理由です。
