ASCII ( / ˈ æ s k i /ⓘ"},"2":{"wt":"kee"}},"i":0}}]}"> ASS"},"2":{"wt":"kee"}},"i":0}}]}"> -kee) [ 3 ] : 6American Standard Code for Information Interchangeの頭字語で特定の 95 文字 (英語中心)と 33制御文字(合計 128コード ポイント文字エンコーディングです。使用可能な句読点のセットは、コンピュータ言語の構文とテキスト マークアップに大きな影響を与えました。ASCII は、現代のコンピュータで使用される文字セットの設計に大きな影響を与えました。たとえば、Unicodeは ASCII と同じです。"},"2":{"wt":"kee"}},"i":0}}]}">
ASCII は、各コード ポイントを 0 から 127 までの値としてエンコードし、 7ビット整数として格納します。[ 4 ] 95 個のコード ポイントは印刷可能で、数字0から9、小文字のaからz、大文字のAからZ、およびよく使用される句読点が含まれます。たとえば、文字は 105 ( 10 進数)で表されます。また、ASCII は、テレタイプ デバイスに由来する33 個の非印刷制御コードを指定していますが、そのほとんどは今では廃止されています。[ 5 ]現在も一般的に使用されている制御文字には、キャリッジ リターン、ライン フィード、タブなどがあります。 i
ASCIIには発音記号付き文字のコードポイントがないため、résumé、jalapeño、Renéなどの単語や名前を直接サポートしていません。ただし、ハードウェアとソフトウェアのサポートによっては、バッククォート(`)またはチルダ(~)で文字を上書きすることで、一部の発音記号を表示できます。
インターネット割り当て番号機関(IANA)はこの文字エンコーディングにUS-ASCIIという名称を推奨している。 [ 2 ]
ASCIIはIEEEのマイルストーンの一つである。[ 6 ]
ASCIIは、以前の電信コードを基に開発された7ビットのテレプリンタコードの標準化である。
ASCII 規格の作業は 1961 年 5 月にIBM のエンジニアBob Bemer が米国規格協会 (ASA) (現在の米国国家規格協会、ANSI) の X3.2 小委員会に提案書を提出したことから始まった。[ 7 ]規格の初版は 1963 年に発行され、[ 8 ] Teletype Model 33の導入と同時期であった。その後、1967 年に大幅な改訂が行われ、[ 9 ] [ 10 ] 1986 年までさらに数回改訂された。[ 11 ] Baudotなどの以前の電信コードとは対照的に、ASCII はより便利な照合 (特にリストのアルファベット順ソート) のために順序付けられ、テレプリンタ以外のデバイス用の制御が追加された。[ 11 ]

ASCIIは、米国規格協会(ASA)のX3委員会と呼ばれる委員会の主導の下、そのX3.2(後にX3L2)小委員会によって、そして後にその小委員会のX3.2.4ワーキンググループ(現在のINCITS)によって開発されました。ASAは後に米国規格協会(USASI)[ 3 ] : 211となり、最終的には米国国家規格協会(ANSI)となりました。
他の特殊文字と制御コードが記入された後、ASCII は ASA X3.4-1963 として公開されました。[ 8 ] [ 12 ]将来の標準化のために意味が割り当てられていない 28 個のコード位置と、割り当てられていない制御コードが 1 つ残されました。[ 3 ] : 66,245当時、小文字のアルファベットではなく、制御文字を増やすべきかどうかについて議論がありました。[ 3 ] : 435優柔不断は長くは続きませんでした。1963 年 5 月、CCITT 新電信アルファベット作業部会は、スティック[ a ] [ 13 ] 6 と 7 [ 14 ]に小文字を割り当てることを提案し、国際標準化機構TC 97 SC 2 は 10 月に、この変更をドラフト標準に組み込むことを投票で決定しました。[ 15 ] X3.2.4 タスク グループは、1963 年 5 月の会議で ASCII への変更を承認しました。[ 16 ]スティック[ a ] [ 13 ] 6 と 7に小文字を配置すると、ビットパターンが大文字と 1 ビット異なるため、大文字小文字を区別しない文字マッチングとキーボードやプリンタの構造が簡素化されました。
X3 委員会は他にも変更を加えました。中括弧と縦棒の文字を追加しました。[ 17 ]一部の制御文字の名前を変更しました。SOMはSOHになりました。他の文字を移動または削除しました。RUは削除されました。[ 3 ] : 247–248 ASCII はその後 USAS X3.4-1967 に更新され、[ 9 ] [ 18 ]次に USAS X3.4-1968 に更新され、[ 19 ] ANSI X3.4-1977 に更新され、最後に ANSI X3.4-1986 に更新されました。[ 11 ] [ 20 ]
ネットワーク交換におけるASCII形式の使用は1969年に記述された。[ 21 ]その文書は2015年に正式にインターネット標準に昇格した。[ 22 ]
X3.15規格では、X3委員会はASCIIをどのように送信するか(最下位ビットから)[ 3 ]: 249-253 [ 29 ] 、そして穴あきテープに記録するかについても検討しました。彼らは磁気テープ用の9トラック規格を提案し、パンチカード形式の一部に対応しようと試みました。
X3.2小委員会は、以前のテレプリンタ符号化システムに基づいてASCIIを設計しました。他の文字符号化と同様に、ASCIIはデジタルビットパターンと文字記号(つまり、グラフェムと制御文字)の対応関係を規定します。これにより、デジタルデバイスが相互に通信し、書き言葉などの文字指向情報を処理、保存、伝達することができます。ASCIIが開発される前は、使用されていた符号化には26のアルファベット文字、10の数字、および11から25の特殊なグラフィック記号が含まれていました。これらすべてと、 1932年の国際電話電信諮問委員会(CCITT)の国際電信アルファベットNo.2(ITA2)規格[ 30 ] [ 31 ] 、 FIELDATA(1956年)、および初期のEBCDIC(1963年)と互換性のある制御文字を含めるために、ASCIIには64を超えるコードが必要でした。
ITA2は、エミール・ボードが1870年に発明し、1874年に特許を取得した5ビットの電信コードであるボードコードに基づいていた。[ 31 ]
委員会は、 6ビットコードで64種類以上のコードを表現できるシフト機能( ITA2と同様)の可能性について議論した。シフトコードでは、一部の文字コードが、後続の文字コードの選択肢を決定する。これによりコンパクトな符号化が可能になるが、データ伝送の信頼性は低下する。シフトコードの送信エラーが発生すると、伝送データの大部分が判読不能になることが多いためである。標準化委員会はシフト方式を採用しないことを決定したため、ASCIIでは少なくとも7ビットコードが必要となった。[ 3 ]: 215§13.6、236§4
委員会は、8 ビット (オクテット) であれば 2 つの 4 ビット パターンで 2 桁を効率的にバイナリ コーディング 10 進数でエンコードできるため、8 ビット コードを検討しました。しかし、7 ビットで十分な場合でも、すべてのデータ送信で 8 ビットを送信する必要が生じます。委員会は、データ送信に伴うコストを最小限に抑えるため、7 ビット コードを使用することに投票しました。当時、穴あきテープは 1 つの位置に 8 ビットを記録できたため、必要に応じてエラー チェック用のパリティ ビットも使用できました。[ 3 ] : 217 §c、236 §5パリティ チェックを使用しない8 ビットマシン (ネイティブ データ タイプとしてオクテットを使用) では、通常、8 番目のビットを 0 に設定していました。[ 32 ]
コード自体は、識別しやすいように、ほとんどの制御コードとすべてのグラフィックコードが一緒になるようにパターン化されていました。最初の 2 つのいわゆるASCII スティック[ a ] [ 13 ] (32 ポジション) は制御文字用に予約されていました。[ 3 ] : 220, 236 8, 9)ソートを容易にするために「スペース」文字はグラフィックの前に来る必要があったため、16 進数で位置 20 になりました。[ 3 ] : 237 §10同じ理由で、区切り文字としてよく使用される多くの特殊記号が数字の前に配置されました。委員会は、64 文字の大文字アルファベットをサポートすることが重要であると判断し、 DEC SIXBITコード (1963 年) で行われたように、ASCII を使いやすい 64 文字のグラフィック コード セットに簡単に縮小できるようにパターン化することを選択しました。[ 3 ] : 228, 237 §14そのため、小文字は大文字と混在しませんでした。小文字やその他のグラフィックのオプションを維持するため、特殊コードと数字コードは文字の前に配置され、文字A は対応する英国規格の草案に合わせて41 16 進数の位置に配置されました。 [ 3 ] : 238 §18数字 0~9 には 011 が接頭辞として付けられますが、残りの4 ビットはバイナリでのそれぞれの値に対応しており、バイナリコード化 10 進数との変換が簡単に行えます (たとえば、5 は 011 0101にエンコードされ、5 はバイナリで0101です)。
非英数字文字の多くは、タイプライターのシフト位置に対応するように配置されていました。重要な微妙な点は、これらは電動タイプライターではなく、機械式タイプライターに基づいていたということです。[ 33 ]機械式タイプライターは、シフトキーを備えた最初のタイプライターであるレミントン No.2 (1878)によって設定された事実上の標準に従い、シフト値はでした。初期のタイプライターは0と1を省略し、代わりにO (大文字のo ) とl (小文字のL ) を使用しましたが、 0 と 1 が一般的になると、と のペアが標準になりました。したがって、ASCII では、 は 2 番目のスティック[ a ] [ 13 ]の位置 1 ~ 5 に配置され、隣接するスティックの数字 1 ~ 5 に対応します。[ a ] [ 13 ]ただし、 0に対応する位置はスペース文字で占められていたため、括弧は9と0に対応できませんでした。これは、 6からアンダースコアを削除し、残りの文字をシフトすることで対応されました。これは、括弧を8と9に配置する多くのヨーロッパのタイプライターに対応していました。タイプライターとのこの相違により、ビットペアのキーボードが開発され、特にTeletype Model 33では、従来の機械式タイプライターとは異なり、ASCII に対応する左シフト配列が使用されました。23456789-"#$%_&'() 1!0)!"#$%_
電動タイプライター、特にIBM Selectric (1961 年) は、 IBM PC (1981 年)、特にModel M (1984 年)以降、コンピュータの事実上の標準となったレイアウトとは少し異なるレイアウトを使用しており、そのため、現代のキーボードの記号のシフト値は、以前のキーボードほど ASCII テーブルに正確に対応していません。このペアも No. 2 に由来し、このペアは一部のキーボードで使用されていました (No. 2 を含む他のキーボードでは、シフト(コンマ) や(ピリオド) がなかったため、シフトを解除せずに大文字で使用できました)。しかし、ASCII は(No. 2 に由来する) ペアを分割し、数学記号 (さまざまな規則、一般的に) を に再配置しました。 /?,< .>,.;:-* =+:* ;+ -=
当時一般的だったタイプライター文字の½ ¼ ¢中には含まれていないものもあり、特に は^ ` ~ 含まれていない。一方、 は国際的に使用される発音記号として、 は数学的に使用される記号として、単純な線文字(一般的な に加えて)とともに含まれている。@記号はヨーロッパ大陸では使用されておらず、委員会はフランス語版ではアクセント付きのÀに置き換えられると予想していたため、 @は文字 A の直前の40 16 進数の位置に配置された。 [ 3 ] : 243<>\ |/
データ伝送に不可欠とされた制御コードは、メッセージの開始(SOM)、アドレスの終了(EOA)、メッセージの終了(EOM)、送信の終了(EOT)、「あなたは誰ですか?」(WRU)、「あなたは?」(RU)、予約済みデバイス制御(DC0)、同期アイドル(SYNC)、および確認応答(ACK)であった。これらは、ビットパターン間のハミング距離を最大化するように配置されていた。[ 3 ]: 243-245
ASCIIコード順はASCIIベティカル順とも呼ばれます。[ 34 ]データの照合は、「標準的な」アルファベット順(照合順序)ではなく、この順序で行われることがあります。ASCII順序の主な逸脱は次のとおりです。
中間処理では、ASCII値を比較する前に大文字を小文字に変換します。


ASCIIでは、最初の32個のコードポイント(10進数で0~31)と最後の1個(10進数で127)を制御文字用に予約しています。これらは、周辺機器(プリンタなど)を制御したり、磁気テープなどに保存されたデータストリームに関するメタ情報を提供したりするためのコードです。これらのコードポイントは、その名前とは裏腹に、印刷可能な文字を表すものではありません(つまり、文字ではなく信号です)。デバッグ目的で、これらのコードポイントには、ISO 2047およびその前身規格で規定されているような「プレースホルダー」シンボルが割り当てられます。
例えば、文字 0x0A は「ラインフィード」機能 (プリンタが用紙を送るようにする機能) を表し、文字 8 は「バックスペース」を表します。RFC 2822 では、キャリッジリターン、ラインフィード、または空白を含まない制御文字を非空白制御文字と呼んでいます。[ 35 ]基本的な行指向フォーマットを規定する制御文字を除いて、ASCII はドキュメント内のテキストの構造や外観を記述するメカニズムを定義していません。マークアップ言語、アドレス ページ、ドキュメントのレイアウトとフォーマットなどの他のスキームがあります。
オリジナルのASCII規格では、各制御文字に対して短い説明文しか使用されていませんでした。このため生じる曖昧さは、端末リンクやデータストリームで文字がわずかに異なる意味で使用される場合など、意図的なものもありました。
これらの文字の解釈に最も大きな影響を与えた単一のデバイスは、おそらくテレタイプ モデル 33 ASR でしょう。これは、紙テープ読み取り/パンチオプションを備えた印刷端末でした。紙テープは、1980 年代まで長期プログラム保存媒体として非常に人気があり、磁気テープよりも安価で、ある意味では壊れにくいものでした。特に、テレタイプ モデル 33 のコード 17 (制御 Q、DC1、別名 XON)、19 (制御 S、DC3、別名 XOFF)、および 127 (削除)の割り当ては、事実上の標準となりました。モデル 33 はまた、制御 G (コード 7、BEL、オペレーターに音声で警告することを意味する) の説明を文字通りに解釈したことでも注目に値します。このユニットには、BEL 文字を受信すると実際にベルが鳴る機能が内蔵されていました。 Oキーのキートップには左矢印記号(ASCII-1963ではアンダースコアの代わりにこの文字が使われていた)も表示されていたため、コード15(Ctrl+O、Shift+In)を「前の文字を削除」と解釈する非準拠の使い方が初期のタイムシェアリングシステムで多く採用されたが、最終的には使われなくなった。
自動紙テープ読み取り装置を備えたテレタイプ33 ASRが制御S(XOFF、送信オフの略)を受信すると、テープ読み取り装置が停止し、制御Q(XON、送信オン)を受信すると、テープ読み取り装置が再開しました。このいわゆるフロー制御技術は、バッファオーバーフローが差し迫っているため送信者に送信を停止するよう警告する「ハンドシェイク」信号として、初期のコンピュータオペレーティングシステムのいくつかで採用されました。これは、手動出力制御技術として、今日でも多くのシステムで使用されています。一部のシステムでは、制御Sの意味はそのままですが、出力再開のために制御Qが2つ目の制御Sに置き換えられています。
33 ASR は、コントロール R (DC2) とコントロール T (DC4) を使用してテープ パンチを開始および停止するように構成することもできました。この機能を備えた一部のユニットでは、キー キャップ上の対応するコントロール文字は、それぞれ TAPE とTAPEでした。[ 36 ]
テレタイプはタイプヘッドを後ろに動かすことができなかったため、キーボードにBS(バックスペース)を送信するキーはありませんでした。代わりに、RUB OUTコード127(DEL)を送信するキーがありました。このキーの目的は、手動で入力した紙テープの間違いを消去することでした。オペレーターはテープパンチのボタンを押してテープをバックし、消去コードを入力する必要がありました。これにより、すべての穴が開けられ、間違いは無視されるべき文字に置き換えられました。[ 37 ]テレタイプは、 Digital Equipment Corporation (DEC)の安価なコンピュータでよく使用されていました。これらのシステムは使用可能なキーを使用する必要があったため、DEL文字は前の文字を消去するために割り当てられました。[ 38 ] [ 39 ]このため、DECのビデオ端末は(デフォルトで)「バックスペース」とマークされたキーにDEL文字を送信し、「削除」とマークされた別のキーはエスケープシーケンスを送信しました。他の多くの競合端末は、バックスペースキーにBS文字を送信しました。
初期の Unix tty ドライバは、現代の実装とは異なり、標準的な入力処理 (非常にシンプルな行エディタが利用可能な場合) で前の文字を消去するために設定できる文字は 1 つだけでした。これは BSまたはDEL に設定できましたが、両方には設定できなかったため、ユーザーが使用している端末に応じて判断しなければならないという曖昧な状況が繰り返し発生しました ( ksh、bash、zshなどの行編集を許可するシェルは両方を理解します)。キーが BS 文字を送信しないという前提により、Ctrl+H をGNU Emacsの「help」プレフィックス コマンドなど、他の目的に使用することができました。[ 40 ]
制御文字の多くは、本来の意味とは全く異なる意味を持つようになりました。例えば、「エスケープ」文字(ESC、コード27)は、元々は他の制御文字をその意味を発動させるのではなく、リテラルとして送信できるようにする「エスケープシーケンス」として意図されていました。これは、URLエンコーディング、C言語の文字列、その他特定の文字に予約された意味を持つシステムで見られる「エスケープ」と同じ意味です。しかし、時が経つにつれ、この解釈は流用され、最終的には変更されました。
現代の使用法では、端末に送信される ESC は通常、コマンド シーケンスの開始を示し、カーソルのアドレス指定、領域のスクロール、さまざまな端末プロパティの設定/照会などに使用できます。これらは通常、 ECMA-48 (1972) とその後継規格のいわゆる「 ANSI エスケープ コード」の形式です (多くの場合、「制御シーケンス イントロデューサ」、「CSI」、「ESC [」で始まります) 。一部のエスケープ シーケンスにはイントロデューサがありません。たとえば、「初期状態へのリセット」、「RIS」コマンド「ESC c」などです。[ 41 ]
対照的に、端末から読み取られたESCキーは、 TECOやviなどのテキストエディタのように、操作や特殊モードを終了するための帯域外文字として最もよく使用されます。グラフィカルユーザーインターフェース(GUI)やウィンドウシステムでは、ESCキーは通常、アプリケーションに現在の操作を中止させるか、完全に終了させます。
一部の制御文字が新しい意味に再適用されたことで、システム間で「プレーンテキスト」ファイルを転送する際に問題が発生しました。その最たる例が、さまざまなオペレーティングシステムにおける改行の問題です。テレタイプマシンでは、テキストの行は「キャリッジリターン」(プリントヘッドを行頭に移動させる)で終了し、その後に「ラインフィード」(用紙を1行進める)を行う必要がありました。「キャリッジリターン」という名前は、手動タイプライターでは、用紙を保持するキャリッジが移動し、リボンを叩くタイプバーは静止したままであることに由来しています。次の行の用紙を配置するには、キャリッジ全体を右に押し(「リターン」)る必要があります。
DECのオペレーティングシステム(OS/8、RT-11、RSX-11、RSTS、TOPS-10など)は、テレタイプ端末の要求に応じて、テキストファイルの各行末に両方の文字を保存していました。いわゆる「ガラス製TTY」(後にCRTまたは「ダム端末」と呼ばれる)が導入された際も、同じロジックに従い、同じCRとLF文字を想定していました。Gary KildallがCP/Mを作成した際、彼はDECのRT-11オペレーティングシステムで使用されていたコマンドラインインターフェースの慣例から着想を得ました。
1981年にIBM PC DOSが導入されるまで、IBMはこの件に関して何の影響力も持っていませんでした。なぜなら、1970年代のIBMのオペレーティングシステムはASCIIではなくEBCDICエンコーディングを使用しており、パンチカード入力とラインプリンタ出力に特化していたため、「キャリッジリターン」の概念は意味をなさなかったからです。IBMのPC DOS( MicrosoftによってMS-DOSとしても販売された)は、CP/Mを緩やかにベースにしていたためCRLFの慣習を受け継ぎ、[ 42 ] Windowsは今度はMS-DOSからそれを受け継ぎました。
プレーンテキスト文書やデータストリームの各行の末尾に CR と LF を配置することは、端末やプリンタがその資料を表示するために受信する必要があった内容を反映しています。Multicsは革新的な機能を導入しました。それは、保存されたファイルやデータストリームの行末を表すために、1 文字 (LF) のみを使用することでした。[ 43 ] : 357出力時に、tty ドライバは LF を CRLF に変換するため、ファイル形式を明示的に変換するコマンドを必要とせずに、ファイルを端末に印刷できます。UnixおよびUnixライクなシステムは、 Amigaシステムと同様に、Multics からこの設計を採用しました。UNIX 文書では、行末を指すのに「newline」または「NL」と表記されています。これとは対照的に、Radio Shack TRS-80、Apple DOS、Apple ProDOS、および従来の Mac OS では、行末に単一のキャリッジリターン (CR) が使用されていました。Apple の後のオペレーティングシステムである Mac OS X (現在はmacOSと呼ばれています) は Unix をベースにしているため、ラインフィード (LF) を使用しています。
ARPANETに接続されたコンピュータには、CR-LF 改行コードを使用するTOPS-10 やTENEXなどのオペレーティングシステムを実行するマシン、LF 改行コードを使用する Multics などのオペレーティングシステム、行を文字数と行の文字で表し、ASCII エンコーディングではなく EBCDIC を使用するOS/360などのオペレーティングシステムが含まれていました。これらのシステム間の通信を可能にするために、 Telnetプロトコルは「ネットワーク仮想端末」(NVT)を定義し、送信には単一のテキスト形式(CR-LF 改行コードを使用した ASCII)が使用され、各システムは独自のネイティブ表現との間で変換を行いました。[ 44 ]
ファイル転送プロトコルは、コマンドの送信とテキストファイルの転送(「ASCII モード」として知られる)のために、ネットワーク仮想端末を含む Telnet プロトコルを採用しました。[ 45 ] [ 46 ] インターネットの電子メールは NVT の上に構築されています。[ 47 ] ワールド ワイド ウェブのHTTP は修正された NVT を使用しています。この標準では単独の CR および LF 文字が許可されていますが、それぞれが NVT CRLF として解釈される必要があります。[ 48 ]
NVTメカニズムに従わないネットワーク接続システム(一部のバージョン管理システムなど)では複雑性が生じました。[ 49 ]バグによってシステムのネイティブ実装がインターネット上の他のシステムに公開され、データ破損を引き起こすことがあります。[ 50 ]
PDP-6モニタ[ 38 ]とその後継機であるPDP-10 TOPS-10 [ 39 ]は、端末からの入力のファイル終了を示すためにコントロールZ(SUB)を使用していた。CP/Mなどの一部のオペレーティングシステムは、ファイル長をディスクブロック単位でのみ追跡し、コントロールZを使用してファイル内の実際のテキストの終了をマークしていた[ 51 ] 。これらの理由から、EOF、つまりファイルの終了は、SUBstituteの代わりにコントロールZの3文字の頭字語として口語的にも慣習的にも使用されていた。コントロールCとしても知られるテキスト終了文字(ETX)はさまざまな理由で不適切であったが、コントロールZをファイルの終了を制御する文字として使用することは、アルファベットの最後にある文字Zの位置と類似しており、非常に便利な記憶補助として機能する。歴史的に一般的であり、現在でも広く用いられている慣習として、ETX文字規約を用いて、通常はキーボードからの入力データストリームを介してプログラムを中断および停止させる方法がある。
Unixの端末ドライバは、データストリームの終了を示すために、送信終了文字(EOT)、別名コントロールDを使用します。
C言語やUnixの慣例では、ヌル文字はテキスト文字列の終端に使用されます。このようなヌル終端文字列は、略してASCIZまたはASCIIZとして知られており、ここでZは「ゼロ」を表します。
採用当時、コード20(16進数)から7E(16進数)は可視文字(グリフ)の印刷を引き起こしたため、「印刷可能文字」と指定されました。これらのコードは、文字、数字、句読点、およびいくつかのその他の記号を表します。印刷可能文字は全部で95種類あります。[ n ]
キーボードのスペースバーによって生成される単語間の空白は、文字コード20 (16進数)です。スペース文字は印刷されたテキストで表示されるため、目に見えるグリフがないという点で独特であるにもかかわらず、「印刷可能文字」とみなされます。ASCII標準に従って、制御文字テーブルではなく、印刷可能文字テーブルに記載されています。[ 3 ]: 223 [ 21 ]
コード7F(16進数)は、印刷不可能な「削除」(DEL)制御文字に対応し、制御文字テーブルに記載されています。
ASCIIの初期バージョンでは、キャレットの代わりに上矢印(16進数で5E )、アンダースコアの代わりに左矢印(16進数で5F )が使用されていました。[ 8 ] [ 52 ]
ASCII は、1963 年にAmerican Telephone & Telegraphの TWX (TeletypeWriter eXchange) ネットワーク用の 7 ビットのテレプリンタ コードとして初めて商用利用されました。TWX は当初、競合するTelexテレプリンタ システムでも使用されていた、それ以前の 5 ビットのITA2 を使用していました。Bob Bemer はエスケープ シーケンスなどの機能を導入しました。[ 7 ]彼のイギリス人の同僚であるHugh McGregor Ross は、この研究を普及させるのに貢献しました。Bemerによると、「ASCII になるコードは、ヨーロッパでは当初Bemer–Ross コードと呼ばれていました」。[ 53 ] ASCII に関する広範な研究により、Bemer は「ASCII の父」と呼ばれています。[ 54 ]
1968年3月11日、米国大統領リンドン・B・ジョンソンは、米国連邦政府が購入するすべてのコンピュータがASCIIをサポートすることを義務付け、次のように述べた。[ 55 ] [ 56 ] [ 57 ]
私はまた、コンピュータ操作において磁気テープおよび紙テープに情報交換標準コードを記録する際の基準に関する商務長官(ルーサー・H・ホッジス)の勧告を承認しました。1969年7月1日以降に連邦政府の在庫に取り込まれるすべてのコンピュータおよび関連機器は、情報交換標準コードと、磁気テープおよび紙テープ規格で規定されたフォーマットを使用できる機能を備えていなければなりません。
ASCIIは、2007年12月にUTF-8エンコーディングに追い抜かれるまで、ワールドワイドウェブで最も一般的な文字エンコーディングでした。UTF-8はASCIIとの下位互換性があります。 [ 58 ] [ 59 ] [ 60 ]
コンピュータ技術が世界中に普及するにつれ、さまざまな標準化団体や企業が、ローマ字をベースとしたアルファベットを使用する英語以外の言語の表現を容易にするために、ASCIIの多くのバリエーションを開発しました。これらのバリエーションの中には「ASCII拡張」と分類できるものもありますが、7ビット範囲でASCIIの文字マップを保持しないものも含め、すべてのバリエーションを指すのにこの用語を誤用する人もいます。さらに、ASCII拡張自体がASCIIと誤って呼ばれることもあります。
ASCIIは開発の初期段階から、国際文字コード標準のいくつかの国内版の1つとして意図されていました。[ 61 ]
他の国際標準化団体は、ASCIIと同一またはほぼ同一の文字エンコーディングであるISO 646 (1967)などを承認しており、英語のアルファベット以外の文字や、コードページ1104にある英国ポンド(£)の記号など、米国以外で使用される記号のための拡張機能も備えています。ASCIIは米国とごく少数の国のニーズにしか適合しなかったため、ほぼすべての国がASCIIの適応版を必要としました。たとえば、カナダはフランス語の文字をサポートする独自のバージョンを持っていました。
他の多くの国では、英語以外の文字(例: é、ñ、ß、Ł)、通貨記号(例:£、¥)などを含むASCIIの派生版が開発されました。YUSCII(ユーゴスラビア)も参照してください。
ほとんどの文字は共通だが、その他のローカルで有用な文字は「国内使用」用に予約されたいくつかのコードポイントに割り当てられる。しかし、ASCII-1963 の発行から ISO が 1967 年に初めて国際勧告を受け入れるまでの 4 年間が経過したため[ 62 ]、 ASCII が国内使用文字に選択したものが事実上の世界標準のように見え、他の国がこれらのコードポイントに独自の割り当てを始めると混乱と非互換性が生じた。
ISO/IEC 646はASCIIと同様に7ビットの文字セットです。追加のコードは提供されていないため、同じコードポイントでも国によって異なる文字がエンコードされていました。エスケープコードは、テキストに適用される国別バリアントを示すために定義されていましたが、ほとんど使用されなかったため、どのバリアントを扱うべきか、ひいてはどの文字をコードが表しているのかを知ることはしばしば不可能でした。また、一般的にテキスト処理システムは1つのバリアントしか処理できませんでした。
ASCII の括弧と中括弧の文字は、ISO/IEC 646 の他の各国版でアクセント付き文字に使用される「各国使用」コード ポイントに割り当てられていたため、ASCII ではなく、ISO/IEC 646 の各国版を使用するドイツ、フランス、スウェーデンなどのプログラマーは、次のようなものを記述し、読み取る必要がありました。
ä aÄiÜ = 'Ön'; ü
の代わりに
{ a[i] = '\n'; }
C の三文字表記は、 ANSI Cのこの問題を解決するために作成されましたが、その導入が遅く、コンパイラでの実装が一貫していなかったため、その使用は限られていました。多くのプログラマーはコンピュータを ASCII のままにしていたため、スウェーデン語やドイツ語などのプレーンテキスト (電子メールやUsenet など) には、単語の途中に "{, }" や同様のバリエーションが含まれており、プログラマーはそれに慣れていました。たとえば、スウェーデン人のプログラマーが別のプログラマーに昼食に行くかどうかを尋ねるメールを送ると、"N{ jag har sm|rg}sar" という返信が来る可能性があり、これは "Nä jag har smörgåsar" で、「いいえ、サンドイッチがあります」という意味になります。
日本と韓国では、2020年代の時点でも、ASCIIの変形版が使用されており、バックスラッシュ(16進数で5C)は、日本では¥(円記号)、韓国では₩(ウォン記号)として表示されます。つまり、例えばファイルパスC:\Users\Smithは、日本ではC:¥Users¥Smith、韓国ではC:₩Users₩Smithと表示されます。
ヨーロッパでは、放送テレビの字幕に、ASCII の派生文字セットであるテレテキスト文字セットが使用されています。これは、世界システムテレテキストによって定義され、テレテキストを DVB 送信に埋め込むための DVB-TXT 規格を使用して放送されます。[ 63 ]字幕が最初にテレテキスト用に作成され、変換された場合、派生した字幕フォーマットは同じ文字セットに制限されます。
やがて、8ビット、16ビット、32ビット(そして後に64ビット)コンピュータが12ビット、18ビット、36ビットコンピュータに取って代わり、標準となるにつれて、各文字をメモリに格納するために8ビットバイトを使用することが一般的になり、ASCIIの拡張版である8ビット版が登場する機会が生まれました。ほとんどの場合、これらはASCIIの真の拡張として開発され、元の文字マッピングはそのままに、最初の128文字(つまり7ビット)の後に文字定義を追加しました。ASCII自体は7ビットコードのままであり、「拡張ASCII」という用語は公式には認められていません。
一部の国では、現地語で使用される文字をサポートする8ビットASCII拡張版が開発されました(例えば、インドではISCII 、ベトナムではVISCII)。
追加言語をサポートするために多くの文字を追加する必要がなかった市場であっても、初期の家庭用コンピュータシステムのメーカーは、ボックス描画文字、セミグラフィックス、ビデオゲームのスプライトなどの追加文字を含めるために、ASCIIの独自の8ビット拡張を開発することがよくありました。多くの場合、これらの追加により、制御文字(インデックス0~31、およびインデックス127)が、さらにプラットフォーム固有の拡張に置き換えられました。その他の場合、余分なビットは、反転ビデオの切り替えなど、他の目的に使用されました。このアプローチは、 Atariが開発したASCIIの拡張であるATASCIIで使用されました。
ほとんどのASCII拡張機能はASCII-1967(現在の標準規格)に基づいていますが、一部の拡張機能はそれよりも古いASCII-1963に基づいています。例えば、コモドール・インターナショナルが8ビットシステム向けに開発したPETSCIIはASCII-1963に基づいています。同様に、シャープMZの文字セットの多くもASCII-1963に基づいています。
IBM はIBM PC用にコード ページ 437を定義し、制御文字をスマイリー フェイスなどのグラフィック シンボルに置き換え、上位 128 ポジションに追加のグラフィック 文字をマッピングしました。[ 64 ] Digital Equipment Corporation は、ブロック グラフィックよりも国際言語向けに設計された最初の拡張機能の 1 つですが、人気のVT220端末で使用するために多国籍文字セット (DEC-MCS)を開発しました。AppleはMacintosh 用にMac OS Romanを定義し、 Adobe はPostScript用にPostScript Standard Encoding を定義しました。どちらのセットも、グラフィックの代わりに「国際」文字、活字記号、句読点を含み、現代の文字セットに近いものでした。
ISO /IEC 8859規格 (DEC-MCS から派生) は、ほとんどのシステムがコピーした (または、完全にコピーされなかったとしても、少なくともそれを基にした) 規格を提供しました。Microsoft が設計した人気の高い拡張規格であるWindows-1252 ( ISO-8859-1と誤って表記されることが多い) は、従来のテキスト印刷に必要な活字句読点を追加しました。ISO-8859-1、Windows-1252、およびオリジナルの 7 ビット ASCII は、UTF-8がそれらを追い越した2008 年まで、ワールド ワイド ウェブで最も一般的な文字エンコーディング方式でした。[ 59 ]
ISO/IEC 4873では、 7ビットASCIIエンコーディングを8ビットシステムに拡張する一環として、 80~9Fの16進数範囲で定義された32個の追加の制御コードが導入されました。 [ 65 ]
UnicodeとISO/IEC 10646ユニバーサル文字セット(UCS)は、はるかに幅広い文字セットを備えており、その多様なエンコード形式は、多くの環境でISO/IEC 8859とASCIIに急速に取って代わり始めています。ASCIIは128文字に制限されていますが、UnicodeとUCSは、一意の識別(コードポイントと呼ばれる自然数を使用)とエンコード(それぞれUTF-8、UTF- 16、UTF-32と呼ばれる8ビット、16ビット、または32ビットのバイナリ形式)の概念を分離することで、より多くの文字をサポートしています。
ASCIIはUnicode(1991)文字セットの最初の128シンボルとして組み込まれたため、7ビットASCII文字は両方のセットで同じ数値コードを持ちます。これにより、UTF-8は7ビットASCIIとの下位互換性を持ち、ASCII文字のみを含むUTF-8ファイルは、同じ文字シーケンスを含むASCIIファイルと同一になります。さらに重要なことに、 7ビットASCII文字のみを特殊文字として認識し、最上位ビットがセットされたバイトを変更しないソフトウェア(ISO-8859-1などの8ビットASCII拡張をサポートするためによく行われる)はUTF-8データを変更せずに保持するため、上位互換性が保証されます。[ 66 ]
^@!"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ [\]^_ ` abcdefghijklmnopqrstuvwxyz{|}~
さらに、テキストの処理方法に影響を与える、主に廃止された33個の非印刷制御文字のコードも定義しています。
改行機能 (キャリッジ リターンとライン フィードを組み合わせたもの) を使用する方が、新しい行を開始するために両方の機能を必要とするよりも、人間と機械の両方にとって簡単です。米国国家規格 X3.4-1968 では、ライン フィード コードが改行の意味を持つことを許可しています。
1961 ASCII から 1968 ASCII への変更がありました。一部のコンピュータ言語では、上矢印や左矢印など、1961 ASCII の文字が使用されていました。これらの文字は 1968 ASCII から消えました。当時
テレタイプ
の営業部にいたフレッド・モッキングと、1961 ASCII の意味が完全に失われないように、変化する文字を妥協するタイプ シリンダーの開発に取り組みました。アンダースコア文字は、左矢印としても機能するように、かなりくさび形にしました。