Google Play badge

アスキー


ASCII: コンピュータが文字と記号を保存する方法

大きなアイデア

コンピューターは数字を使います。人間は文字や記号を使います。私たちには橋が必要です。ASCIIがその橋です。ASCIIは文字や記号を数字に変換します。コンピューターはその数字を保存します。私たちが数字を読むと、コンピューターは文字を再び表示します。多くのファイルやアプリでは、テキストはこのように動作します。

コンピューターにコードが必要な理由

コンピューターは電気を使って動作します。オンとオフの2つの状態を認識します。これらの状態を「ビット」と呼びます。1ビットは0か1です。ビットが複数集まると大きな数字になります。8ビットで1バイトになります。ビットを使えば数を数えることができます。数えることで、ものに名前を付けることができます。ASCIIでは、文字や記号に名前を付けるために数え方を使っています。

1ビットで2つの選択肢、2ビットで4つの選択肢が生まれます。数学では、この考え方は\(\;2^n\)と表されます。 \(n=7\)の場合、 \(2^7 = 128\)通りの選択肢が生まれます。 \(n=8\)の場合、 \(2^8 = 256\)の選択肢が生まれます。ASCIIは7ビットを使用します。つまり、128個の名前付き項目が生まれます。後に、256個の項目を持つ8ビットセットが作られました。これらは拡張ASCIIと呼ばれます。

ASCIIの意味

ASCIIは、American Standard Code for Information Interchange(米国標準情報交換コード)の略称です。1960年代に開発が始まりました。初期のプリンター、テレタイプ、コンピューター向けに開発されました。文字、数字、スペース、そして一部の記号に番号が割り当てられています。また、改行などの動作にも特別な番号が割り当てられています。最初のバージョンは7ビットを使用していたため、0から127までの番号が使用されていました。

ASCIIの内容
シンプルなマップの例

面白いことに気づきましょう。小文字は大文字よりも32個多くなります。例えば、 \(\;97 - 65 = 32\)です。つまり、「a」は「A」よりも32個多く、「b」は「B」よりも32個多くなります。このパターンにより、いくつかのコンピュータータスクが簡単になります。

プレーンワード内の制御文字

Enterキーを押すと、コンピュータのシステムによってはLF、CR、またはその両方が送信されます。多くのインターネットツールはLFを使用しますが、古いシステムの中にはCRとLFを併用していたものもありました。

10進数、2進数、16進数の表示

数字は様々な方法で表記できます。10進数は通常の方法で、0から9までの数字を使います。2進数は0と1だけを使います。16進数(16進数)は0から9とAからFを使います。

2進数で「A」が65になるのはなぜでしょうか?01000001のビットを見てください。左端のビットは128です。次は64、32、16、8、4、2、1です。64と1だけがオンです。つまり\(01000001_{(2)} = 0\times128 + 1\times64 + 0\times32 + 0\times16 + 0\times8 + 0\times4 + 0\times2 + 1\times1 = 65\)

キーボードから画面へ

キーを押すと、キーボードからコンピューターにコードが送信され、システムがそれを文字番号に変換します。多くのキーでは、その番号はASCIIコードです。アプリは番号をメモリに保存します。テキストを表示すると、番号を検索して文字を描画します。保存すると、番号がファイルに書き込まれます。

テキストがネットワーク上でどのように移動するか

「Hi!」というメッセージを考えてみましょう。文字はH、i、そして!です。ASCIIコードでは72、105、そして33です。2進数では01001000、01101001、そして00100001です。ネットワークはこれらのビットを送信します。相手側はビットを読み取ります。数字が見えます。そして再びH、i、そして!が表示されます。これが、シンプルなテキストメッセージのやり取りです。

拡張ASCIIとコードページ

人々はもっと多くの記号を求めていました。é、ñ、øのような文字や、€のような通貨記号が欲しかったのです。7ビットセットには128個の記号しかありませんでした。そこで人々は8ビットを使いました。8ビットでは、 \(2^8 = 256\)個の記号が得られます。上位半分、つまり128から255は、追加の文字と記号に使用されました。しかし、問題がありました。グループによって、これらの追加文字に異なる番号が使われていたのです。これらの選択はコードページと呼ばれます。

コードページが異なるため、同じ数字でも別のコンピュータでは異なる記号として表示されることがあります。この混同は「文字化け」と呼ばれ、奇妙な文字のように見えます。これが、世界がUnicodeに移行した理由の一つです。

ASCIIとUnicode

Unicodeは、多くの言語、数学記号、絵文字を表示できる大規模な標準規格です。100万以上の記号を格納できます。Unicodeの格納方法は様々ですが、一般的な方法の一つはUTF-8です。

テキストは何バイト使用しますか

ASCIIのみのテキストでは、各文字は1バイトを使用します。つまり、 「cat 」という単語は3バイトです。 「hi mom」というフレーズはスペースを含めて6文字なので、6バイトを使用します。簡単な計算で言えば、 \(\textrm{ASCIIバイト} = \textrm{文字数}\)となります。

ASCIIによるソート順

コンピュータは文字列を文字番号でソートすることがよくあります。ASCII 順序は、特定の方法でグループ化します。

つまり、単純なASCII値を比較すると、 Zooがappleよりも上位にくるということです。ソートは単語の発音ではなく、数字で行われます。

知っておくべき一般的なASCIIコード

アンパサンドは & です。ASCII 番号は 38 です。プラス記号 + は 43、マイナス記号 - は 45 です。

日常のテクノロジーにおける実際の使用法
役立つASCIIパターン
ASCIIで画像を作成する方法

文字だけを使って絵を描く人もいます。これはASCIIアートと呼ばれています。こちらはASCII文字で作られた小さな顔です。

:-) シンプルな笑顔
(^_^) 優しい顔
o_O 驚いた

各フェイスはコロン、ダッシュ、括弧などの文字で構成されています。色や形はなく、テキストのみです。

歴史を簡潔に、簡単に

ASCIIはテレタイプと初期のコンピュータから発展しました。1963年に最初のバージョンが合意されました。これにより、多くの異なるマシンが相互に通信できるようになりました。共通のコードを使用することで、Aのような文字はどこでも同じ数字を意味します。これにより、メッセージの送信やテキストの印刷が容易になりました。

ASCIIだけでは不十分な場合

ASCIIには128項目しかありません。これはすべての言語に対応できるほどの文字数ではありません。中国語、ヒンディー語、アラビア語、その他多くの文字を表示できません。絵文字も表示できません。また、多くの数学記号や音楽記号も表示できません。これらの文字や記号にはUnicodeを使用します。Unicodeは多くの文字や記号を表示できます。UTF-8はそれらを格納する方法です。幸いなことに、すべてのASCIIテキストはUTF-8で読み取ることができます。そのため、最新のシステムは古いASCIIテキストを簡単に読み取ることができます。

今日のアプリはASCIIをどのように処理するのか

ほとんどのアプリはUTF-8を前提としています。しかし、ファイルにASCII文字と記号しか含まれていない場合、UTF-8でも見た目は同じです。プログラマーはUTF-8を好みます。なぜなら、UTF-8はASCII文字と記号をそのまま含むからです。Webページ、API、そして多くのツールは、ASCII文字と記号をそのまま含むUTF-8を使用しています。

小さな数の事実とフレンドリーな数学

ASCIIは7ビットのセットです。つまり、最大\(2^7 = 128\)個の異なる文字が含まれます。8ビットの拡張セットでは\(2^8 = 256\)個の項目が含まれます。テキストがASCII文字のみで構成され、 \(n\)文字の場合、 \(n\)バイトを使用します。OKような小さなメッセージでは、 \(n = 2\)バイトです。つまり、ASCIIまたはUTF-8として保存すると2バイトになります。

隠された文字を見る

一部のASCII項目はアクションを実行しますが、印刷はされません。スペースは空白を印刷します。しかし、LFとCRはカーソルを移動します。TABはジャンプします。特殊なエディタでファイルを開くと、LFが\nと表示されることがあります。この記号はASCIIコード自体には含まれていません。エディタが改行を示すための手段です。

リアルに感じられる分かりやすい例
注意すべき点
デバイスがASCIIを使用する簡単な手順

名前を印刷するラベルメーカーを想像してみてください。ラベルメーカーは名前を文字として読み取ります。各文字をASCII数値に変換し、その数値をメモリに保存します。そして、それぞれの数値の描画方法を調べて文字を印刷します。LF(10)に遭遇すると、次の行に進んでから次の印刷を始めます。

1文字のコードを書く3つの方法を比較する

もう一度「!」文字を見てください。このコードは3つの方法で表記できます。10進数:33、2進数:00100001、16進数:21です。数学的に表現すると、 \(\;33_{(10)} = 00100001_{(2)} = 21_{(16)}\) 。どちらの形式も同じ値です。アプリは必要な形式を選択します。人は10進数をよく読みますが、コンピューターは2進数を好みます。16進数は、人間が2進数を読むための簡略化された方法です。

ASCIIが長続きした理由

ASCIIは簡潔で明瞭です。古くから開発され、多くのツールやプロトコルがASCII上に構築されました。最初の128個のUnicodeコードがASCIIと一致しているため、この仕組みは今でも有効です。そのため、非常に古いテキストファイルを新しいスマートフォンやノートパソコンで開いても、同じ文字が表示されるのです。

ミニウォークスルー: 短いファイルの読み取り

Hello というテキストが入ったファイルを開きます。バイトはASCII数字の72、101、108、108、111です。2進数では01001000、01100101、01101100、01101100、01101111となります。アプリは各数字を読み取り、画面にHelloと描画します。次の数字が10の場合は、次のテキストを描画する前に改行します。このように、処理はシンプルで安定しています。

ASCIIのみを選択する場合
よく使われるキーシンボル
小さな数字でビットのアイデアを素早くチェック

10という数字を考えてみましょう。2進数では00001010、10進数では10です。ASCIIでは、10はLF、つまり改行コードです。これは、同じ数字が様々な方法で表現できることを示しています。意味は、数字の使い方によって決まります。文字コードだと言えば、10はLFを意味します。リンゴの数だと言えば、10個のリンゴを意味します。文脈が重要です。

もう1つの例を挙げてまとめると

あるデバイスから別のデバイスに「 Sun」という単語を送信します。コードは「S」が83、「u」が117、「n」が110です。2進数では、83は01010011、117は01110101、110は01101110です。ビットはオンとオフの信号として送信されます。もう一方のデバイスは、ビットを数字に戻します。そして、数字を文字に変換します。 「Sun」という単語が表示されます。次のコードが32ならスペース、33なら「!」です。ルールは毎回同じです。これが共有コードの威力です。

Download Primer to continue