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

ASCIIは、アメリカ規格協会(ASA)のX3委員会(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]
委員会は、 ITA2のようなシフト機能の可能性について議論しました。これにより、64以上のコードを6ビットコードで表現できるようになります。シフトコードでは、一部の文字コードが後続の文字コードの選択肢を決定します。これによりコンパクトな符号化が可能になりますが、シフトコードの伝送エラーにより、伝送データの長い部分が判読不能になることが多いため、データ伝送の信頼性は低くなります。標準化委員会はシフトを採用しないことを決定し、ASCIIでは少なくとも7ビットコードが必要となりました。[3] : 215 §13.6, 236 §4
委員会は8ビット符号を検討した。8ビット(オクテット)であれば、2つの4ビットパターンで2つの数字を2進化10進数で効率的に符号化できるためである。しかし、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 は、対応する英国規格の草案と一致するように16進数の41 番目の位置に配置されました。 [3] : 238 §18 数字 0 ~ 9 には 011 がプレフィックスとして付けられますが、残りの4 ビットは2 進数のそれぞれの値に対応しており、2 進化 10 進数による変換は簡単です (たとえば、5 は 011 0101にエンコードされ、2 進数では 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に括弧を配置する多くのヨーロッパのタイプライターに対応していました。タイプライターとのこの矛盾は、ビットペアキーボード、特にテレタイプモデル33につながり、従来の機械式タイプライターとは異なり、ASCIIに対応する左シフトレイアウトを採用しました。
23456789-"#$%_&'()1!0)!"#$%_
電気タイプライター、特にIBM Selectric (1961) は多少異なるレイアウトを使用していましたが、これはIBM PC (1981)、特にModel M (1984)以降、コンピューターの事実上の標準となっています。そのため、現代のキーボードの記号のシフト値は、それ以前のキーボードほど ASCII テーブルと密接には対応していません。 このペアも No. 2 に遡り、一部のキーボードで使用されていました (No. 2 を含むその他のキーボードでは、 (カンマ) または(ピリオド)はシフトしないため、シフト解除せずに大文字で使用できます)。 ただし、ASCII ではこのペア (No. 2 に遡る) を分割し、数学記号 (さまざまな規則、一般的に) を に再配置しました。
/?,< .>,.;:-* =+:* ;+ -=
当時一般的だったタイプライター文字の中には、特に は含まれていなかった½ ¼ ¢が、 は^ ` ~ 国際用および数学用として、単純な線文字(一般的な に加えて)< >と共に、分音記号として含まれていた。@記号はヨーロッパ大陸では使用されておらず、委員会はフランス語版ではアクセント付きのÀに置き換えられると予想したため、 @は16進数で40番目の位置、文字Aの直前に配置された。 [3] : 243 \ |/
データ伝送に不可欠と考えられていた制御コードは、メッセージ開始(SOM)、アドレス終了(EOA)、メッセージ終了(EOM)、伝送終了(EOT)、"who are you?"(WRU)、"are you?"(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 (control-Q、DC1、XON とも呼ばれる)、19 (control-S、DC3、XOFF とも呼ばれる)、および 127 (削除)のマシン割り当ては、事実上の標準になりました。モデル 33 は、control-G (コード 7、BEL、操作者に音声で警告することを意味する) の説明を文字通りに受け止めていることでも有名で、ユニットには BEL 文字を受信すると鳴る実際のベルが含まれていました。 O キーのキートップにも左矢印記号 (アンダースコアの代わりにこの文字を持つ ASCII-1963 から) が表示されていたため、コード 15 (コントロール + O、シフトイン) の非準拠な使用法が「前の文字を削除」と解釈され、多くの初期のタイムシェアリング システムで採用されましたが、最終的には無視されるようになりました。
自動紙テープ読み取り装置を備えたテレタイプ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文字を送信し、「Delete」と表示された別のキーに対してはエスケープシーケンスを送信していました。他の多くの競合端末は、バックスペースキーに対して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または「ダム端末」と呼ばれるようになった)が登場した頃には、この規則は十分に確立されていたため、下位互換性のために引き続きそれに従う必要がありました。ゲイリー・キルドールがCP/Mを開発したとき、彼はDECの RT-11 オペレーティングシステムで使用されていたコマンドラインインターフェース規則のいくつかに触発されました。
1981年にPC DOSが導入されるまで、IBMはこの分野に影響力を持っていませんでした。1970年代のIBMのオペレーティングシステムはASCIIではなくEBCDICエンコーディングを採用しており、パンチカード入力とラインプリンタ出力を主眼に置いていたため、「キャリッジリターン」の概念は意味をなさなかったからです。IBMのPC DOS(マイクロソフトはMS-DOSとしても販売)は、CP/Mを大まかにベースとしていたため、この慣習を継承しました。 [42]そしてWindowsも、MS-DOSからこの慣習を継承しました。
行末を示すのに 2 つの文字が必要なことで、各文字が単独で検出されたときにその解釈方法に関して、不必要な複雑さとあいまいさが生じます。この問題を単純化するために、 Multics上のファイルを含むプレーンテキストのデータ ストリームは、行末記号としてライン フィード (LF) のみを使用しました。[43] : 357 tty ドライバーは出力時に LF から CRLF への変換を処理するので、ファイルは直接端末に印刷でき、UNIXドキュメントでは CRLF を指すために NL (改行) がよく使用されます。UnixおよびUnix系システム、Amigaシステムは、この規則を Multics から採用しました。一方、オリジナルのMacintosh OS、Apple DOS、およびProDOS は、行末記号としてキャリッジ リターン (CR) のみを使用していました。しかし、Apple が後にこれらの旧式のオペレーティング システムを Unix ベースのmacOS (以前は OS X と呼ばれていました) オペレーティング システムに置き換えたため、現在ではライン フィード (LF) も使用されています。Radio Shack TRS-80も行末記号として CR のみを使用していました。
ARPANETに接続されたコンピュータには、CR-LF改行コードを使用するTOPS-10やTENEXなどのオペレーティングシステム、LF改行コードを使用するMulticsなどのオペレーティングシステム、そして文字数とそれに続く行の文字数で行を表すOS/360などのオペレーティングシステムがあり、ASCIIではなくEBCDICエンコードを採用していました。TelnetプロトコルはASCIIの「ネットワーク仮想端末」(NVT)を定義し、異なる改行コードと文字セットを持つホスト間の接続を、ネットワーク経由で標準的なテキスト形式を伝送することでサポートできるようにしました。TelnetはASCIIとCR-LF改行コードを使用し、他の改行コードを使用するソフトウェアは、ローカルな改行コードとNVT間の変換を行いました。[44]ファイル転送プロトコルは、デフォルトのASCIIモードでのコマンド送信とデータ転送に、ネットワーク仮想端末の使用を含むTelnetプロトコルを採用しました。[45] [46]これにより、NVTのCR-LF行末規則を使用していないシステムでは、これらのプロトコルや、電子メールやワールドワイドウェブなどに使用される他のネットワークプロトコルの実装が複雑になります。[47] [48]
PDP-6 モニター[38]とその後継機である PDP-10 TOPS-10 [39]は、端末からの入力に対するファイル終了表示として control-Z (SUB) を使用していました。CP/M などの一部のオペレーティングシステムは、ファイルの長さをディスクブロック単位でのみ追跡し、ファイル内の実際のテキストの終了を示すために control-Z を使用していました。[49]これらの理由から、EOF、つまりファイルの終わりは、SUBstitute ではなく、control-Z の3 文字の頭字語として口語的に慣習的に使用されていました。テキスト終了文字 ( ETX ) はcontrol-Cとしても知られていましたが、さまざまな理由で不適切でしたが、ファイルの終了を示す制御文字として control-Z を使用することは、アルファベットの末尾の文字 Z の位置に類似しており、非常に便利なニーモニック補助として機能します。歴史的に一般的で現在でも普及している慣習では、ETX 文字規則を使用して、通常はキーボードからの入力データストリームを介してプログラムを中断して停止します。
Unix ターミナル ドライバは、データ ストリームの終了を示すために、転送終了文字 ( EOT ) (コントロール D とも呼ばれます) を使用します。
C プログラミング言語および Unix 規則では、ヌル文字はテキスト文字列を終了するために使用されます。このようなヌル終了文字列は、ASCIZ または ASCIIZ という略語で表されます。ここで、Z は「ゼロ」を表します。
専門的な機器では、ISO 2047グラフィックスや16 進数などの他の表現が使用される場合があります。
採用当時、20 16進数から7E 16進数のコードは可視文字(グリフ)の印刷を指示するため、「印刷可能文字」と呼ばれていました。これらのコードは、文字、数字、句読点、そしてその他の記号を表します。印刷可能文字は合計95文字あります。[n]
キーボードのスペースキーによって生成される単語間の空白文字は、文字コード20 (16進数)です。スペース文字は印刷されたテキストに表示されるため、目に見えるグリフを持たないという点で独特ですが、「印刷可能文字」と見なされます。ASCII標準に従って、制御文字テーブルではなく、印刷可能文字テーブルに記載されています。[3] : 223 [21]
コード 7F 16 進数は、印刷できない「削除」(DEL) 制御文字に対応し、制御文字テーブルにリストされています。
ASCIIの初期のバージョンでは、キャレットの代わりに上矢印(16進数5E )、アンダースコアの代わりに左矢印(16進数5F )が使用されていました。[8] [50]
ASCIIは1963年、アメリカ電信電話(ATEL)のTWX(TeletypeWriter eXchange)ネットワーク用の7ビットのテレタイプライターコードとして初めて商用利用されました。TWXは当初、競合会社のTelexテレタイプライターシステムでも使用されていた5ビットのITA2を採用していました。ボブ・ベマーはエスケープシーケンスなどの機能を導入しました。[7]彼のイギリス人の同僚であるヒュー・マクレガー・ロスはこの研究の普及に貢献しました。ベマーによれば、「ASCIIとなるコードはヨーロッパで初めてベマー・ロスコードと呼ばれたほどでした」[51] 。ASCIIに関する広範な研究から、ベマーは「ASCIIの父」と呼ばれています。[52]
1968年3月11日、リンドン・B・ジョンソン大統領は、米国連邦政府が購入するすべてのコンピュータがASCIIをサポートすることを義務付け、次のように述べた。[53] [54] [55]
私はまた、商務長官[ルーサー・H・ホッジス]による、磁気テープおよび紙テープをコンピュータ操作に使用する際に、情報交換用標準コードを記録するための規格に関する勧告を承認しました。1969年7月1日以降に連邦政府の在庫に持ち込まれるすべてのコンピュータおよび関連機器は、これらの媒体を使用する際に、情報交換用標準コードおよび磁気テープおよび紙テープ規格で規定されたフォーマットを使用できる必要があります。
ASCIIは2007年12月までワールドワイドウェブ上で最も一般的な文字エンコーディングであったが、UTF-8エンコーディングがそれを上回った。UTF-8はASCIIと下位互換性がある。 [56] [57] [58]
コンピュータ技術が世界中に普及するにつれ、様々な標準化団体や企業が、ローマ字ベースのアルファベットを使用する英語以外の言語の表現を容易にするために、ASCIIの様々なバリエーションを開発しました。これらのバリエーションのいくつかは「ASCII拡張」に分類できますが、7ビット範囲のASCIIの文字マップを保持しないものも含め、すべてのバリエーションを指すためにこの用語を誤用する人もいます。さらに、ASCII拡張はASCIIと誤って分類されることもありました。
開発当初から、[59] ASCIIは国際的な文字コード標準のいくつかの国別バリエーションの1つに過ぎないことが意図されていました。
他の国際標準化団体も、ISO 646 (1967)などの文字エンコーディングを批准しています。これらはASCIIと同一またはほぼ同一ですが、英語アルファベット以外の文字や、英国ポンド記号(£)など米国以外で使用される記号(コードページ1104など)に対応する拡張が加えられています。ASCIIは米国とその他の少数の国のニーズにしか対応していなかったため、ほぼすべての国でASCIIの適応版が必要でした。例えば、カナダにはフランス語の文字をサポートする独自のバージョンがありました。
他の多くの国では、英語以外の文字 (例: é、ñ、ß、Ł ) や通貨記号 (例: £、¥ ) などを含めるために ASCII のバリエーションを開発しました。YUSCII (ユーゴスラビア) も参照してください。
ASCII-1963はほとんどの文字を共通化しましたが、その他の地域的に有用な文字は「国別使用」のために予約されたいくつかのコードポイントに割り当てられました。しかし、ASCII-1963の発行から1967年にISOが初めて国際勧告を承認するまでの4年間[60]、 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標準を使用して放送されています。[61]字幕が最初にテレテキスト用に作成され、変換された場合、派生した字幕フォーマットは同じ文字セットに制限されます。
最終的に、8 ビット、16 ビット、32 ビット(後に64 ビット)のコンピュータが12 ビット、18 ビット、36 ビットのコンピュータに取って代わり、標準として普及し始めると、各文字をメモリに格納するために 8 ビットバイトを使用するのが一般的になり、ASCII の拡張された 8 ビットの類似文字が生まれるようになりました。ほとんどの場合、これらは ASCII の真の拡張として開発され、元の文字マッピングはそのままに、最初の 128 文字(つまり 7 ビット)の後に追加の文字定義が追加されました。ASCII 自体は 7 ビットコードのままであり、「拡張 ASCII」という用語は公式なものではありません。
一部の国では、現地の言語で使用される文字をサポートする ASCII の 8 ビット拡張が開発されました。たとえば、インドではISCII 、ベトナムではVISCIIです。
初期の家庭用コンピュータシステムのメーカーは、追加言語をサポートするために多くの文字を追加する必要がなかった市場であっても、ボックス描画文字、セミグラフィックス、ビデオゲームのスプライトなどの追加文字を含めるために、独自の8ビットASCII拡張を開発することが多かった。これらの追加により、制御文字(インデックス0から31、およびインデックス127)が、さらにプラットフォーム固有の拡張機能に置き換えられることも多かった。また、余分なビットが反転表示の切り替えなどの他の目的に使用されることもあり、このアプローチはAtariによって開発されたASCIIの拡張であるATASCIIで採用された。
ほとんどのASCII拡張はASCII-1967(現在の標準)に基づいていますが、一部の拡張は以前のASCII-1963に基づいています。例えば、コモドール・インターナショナルが自社の8ビットシステム用に開発したPETSCIIは、ASCII-1963に基づいています。同様に、シャープのMZ文字セットの多くはASCII-1963に基づいています。
IBMはIBM PC用にコードページ437を定義し、制御文字をスマイリーフェイスなどのグラフィックシンボルに置き換え、追加のグラフィック文字を上位128桁にマッピングしました。[62] Digital Equipment Corporationは、ブロック体グラフィックよりも国際言語向けに設計された最初の拡張機能の1つとして、人気のVT220端末で使用するために多国籍文字セット(DEC-MCS)を開発しました。AppleはMacintosh用にMac OS Romanを定義し、 AdobeはPostScript用にPostScript標準エンコーディングを定義しました。どちらのセットにも、グラフィックの代わりに、現代の文字セットに似た「国際的な」文字、印刷記号、句読点が含まれていました。
ISO /IEC 8859規格(DEC-MCSから派生)は、ほとんどのシステムが模倣した(あるいは、完全に模倣していないとしても、少なくともそれに基づいていた)規格を提供しました。Microsoftによって設計された人気の高い拡張であるWindows-1252(しばしばISO-8859-1と誤って記載されています)は、従来のテキスト印刷に必要な印刷用句読点を追加しました。ISO-8859-1、Windows-1252、そしてオリジナルの7ビットASCIIは、 2008年にUTF-8に取って代わられるまで、ワールドワイドウェブ上で最も一般的な文字エンコード方式でした。[57]
ISO/IEC 4873では、 7ビットASCIIエンコードを8ビットシステムに拡張する一環として、 80~9Fの16進数範囲で定義された32の追加制御コードが導入されました。 [63]
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データを変更せずに保持するため、上位互換性が保証されることです。[64]
^@
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
さらに、テキストの処理方法に影響を与える、印刷されない、ほとんどが廃止された制御文字 33 個のコードも定義しています。
「改行」機能(キャリッジリターンとラインフィードの組み合わせ)を使用する方が、改行に両方の機能を必要とするよりも人間と機械の両方にとって簡単です。米国規格X3.4-1968では、改行コードに改行の意味を持たせることが認められています。
1961 ASCII から 1968 ASCII への変更がありました。一部のコンピュータ言語では、上矢印や左矢印など、1961 ASCII の文字が使用されていました。これらの文字は1968 ASCII からは姿を消しました。私たちは、当時
テレタイプ社
の営業担当だった Fred Mocking と協力して、 1961 ASCII の意味が完全に失われないように、変化する文字をうまく処理できる活字シリンダーを開発しました。アンダースコア文字は、左矢印としても機能するように、くさび形にしました。