ASCIIとは
ASCII(American Standard Code for Information Interchange/アメリカン・スタンダード・コード・フォー・インフォメーション・インターチェンジ/アスキー)は、英数字や制御文字を主に7ビットの番号へ対応付けた基本的な文字コードです。
7ビットで表せる値は0から127までの128通りです。ASCIIはその各位置へ制御文字、空間、記号、0〜9、英大文字、英小文字等を割り当てます。日本語の文字はASCIIに含まれません。
ASCIIは「英語だけのテキストファイル」という曖昧な名前ではなく、128個のコード位置の対応表です。保存時は7ビット値を8ビットバイトの下位側へ入れ、上位ビットを0にする形が広く使われます。

7ビットと128個の位置
NUL、タブ、行feed、carriage戻り値、エスケープ等の機能を含みます。
印字される形はありませんが、文字間の空白位置を作るgraphic文字です。
感嘆符、引用符、番号sign等の句読記号を含みます。
0から9がコード順に連続し、数値変換でこの性質を利用できます。
それぞれ英字順に連続しますが、間には記号領域があります。
Delete位置で、通常表示する文字ではありません。
代表的なコード位置
| 種類 | 表記 | 10進 | 16進 | 役割 |
|---|---|---|---|---|
| 制御 | NUL | 0 | 00 | null制御 |
| 制御 | HT | 9 | 09 | 水平タブ |
| 制御 | LF | 10 | 0A | 行feed |
| 制御 | CR | 13 | 0D | carriage戻り値 |
| 空間 | SP | 32 | 20 | 空白 |
| 数字 | 0 | 48 | 30 | 十進数字の先頭 |
| 文字 | A | 65 | 41 | 英大文字の先頭 |
| 文字 | a | 97 | 61 | 英小文字の先頭 |
| 制御 | DEL | 127 | 7F | 削除位置 |
制御文字
制御文字は画面へグリフを描く文字ではなく、通信、機器、テキストレイアウトを制御するためのコードです。現代のアプリケーションでは一部だけを形式制御として使い、他は表示・貼り付け・ログ処理で問題になることがあります。
NULはC言語系で文字列終端として扱われることがあり、ファイル名やAPI入力に混ざると切り詰めや検証差を起こします。ESCやBEL等も端末へそのまま出さずエスケープします。
CRとLF
CR(Carriage Return/キャリッジ・リターン)は行内位置を先頭へ戻す制御、LF(Line Feed/ライン・フィード)は次の行へ進める制御です。歴史的な印刷機動作が名称に残っています。
Unix系テキストは主にLF、WindowsテキストはCR+LFを改行として使います。プロトコルではCRLFを要求する仕様もあります。画面上で一行に見えてもバイト列が違うため、Git 差分や解析器で差になります。
空間とタブ
空間はコード32の一文字で、空白幅一つを表すのが基本です。HTはコード9の制御で、次のタブstopへ進みます。何列進むかは表示環境で変わります。
YAMLの字下げ、プログラムソース、表整形では空間とタブを同じに扱いません。見えない文字を表示して確認します。
数字と数値を分ける
ASCIIの文字0はコード48であり、数値ゼロそのものではありません。テキストの123は三つの文字コードからなる列で、アプリケーションが数値へ解析して初めて数値になります。
同様に16進表示41はASCIIのAを表すバイト値として読めますが、文字列としての「4」「1」とは別です。表示基数とデータ種類を明示します。
8ビットバイトへ格納する
RFC 20は7ビットASCIIを8ビットバイトへ埋め、上位ビットを0にする形を示しています。したがってASCIIバイトは16進で00〜7Fの範囲です。
通信にパリティービットを使った歴史的方式もありますが、現代のファイル・ネットワークで「ASCII」と言うと通常はコード値0〜127をバイトへ入れた表現を指します。
Unicodeとの関係
Unicodeは世界の文字へコード点を割り当てるより大きな文字設定で、先頭128コード点はASCIIと同じ対応です。つまりASCIIテキストはUnicodeの一部分としてそのまま解釈できます。
日本語、emoji、多くの記号は127を超えます。「ASCII以外はすべて全角」という分類ではありません。文字幅とコード点、バイト長さは別です。
UTF-8との関係
UTF-8はUnicodeコード点をバイト列へ符号化する方式です。ASCII範囲は同じ値の1バイトで表すため、ASCIIだけのバイト列は有効なUTF-8でもあります。
ただしUTF-8ファイルに日本語が含まれればマルチバイトになります。アプリケーションがASCIIだけを許可するフィールドと、UTF-8を許可するフィールドを区別します。
「拡張ASCII」という言葉
128〜255へ追加文字を割り当てた8ビットコードページが「拡張 ASCII」と呼ばれることがありますが、単一の共通表ではありません。Windowsコードページ、ISO-8859系列等で同じバイトが別文字になります。
不明なテキストを「拡張ASCII」とだけ記録せず、具体的なエンコーディング名を特定します。誤復号後に保存すると元バイトへ戻せなくなる場合があります。
ASCIIを確認する場面
プロトコルコマンド、HTTPヘッダーの一部、ドメインラベルの基礎、ソースコード、設定、ログ、ファイル形式マーカー等でASCII範囲が使われます。仕様がASCIIを要求する部分へ見た目の似たUnicode文字を入れないようにします。
セキュリティでは制御文字、双方向制御、幅ゼロ文字、同形異字を可視化し、識別子の正規化規則を決めます。
ASCIIは0〜127の7ビットコード表で、制御、空間、記号、数字、英字を含みます。Unicodeの先頭128位置と一致し、UTF-8では同じ値の1バイトになります。
7bit code、8bit byteへの格納、control・graphic character表:RFC 20 / STD 80「ASCII format for Network Interchange」