私の先生は、ASCIIは8ビットの文字コード体系だと教えてくれました。ただし、0〜127のコードに対してのみ定義されているため、7ビットに収めることができます。では、ASCIIは実際には7ビットのコードであると主張することはできませんか?
そして、ASCIIが8ビットコードであると言うとき、私たちはまったく何を言うのですか?
私の先生は、ASCIIは8ビットの文字コード体系だと教えてくれました。ただし、0〜127のコードに対してのみ定義されているため、7ビットに収めることができます。では、ASCIIは実際には7ビットのコードであると主張することはできませんか?
そして、ASCIIが8ビットコードであると言うとき、私たちはまったく何を言うのですか?
ASCIIは確かに元々7ビットコードとして考えられていました。これは、8ビットバイトが普及するかなり前に行われ、1990年代に入っても、テキストの各バイトの8ビットを独自の目的で使用できると想定したソフトウェアを見つけることができました(「8ビットクリーンではない」)。今日、人々はそれをバイト0x80から0xFFが定義された意味を持たない8ビットコーディングと考えていますが、それはretconです。
8番目のビットを利用するテキストエンコーディングは数十あります。これらは、ASCII互換かどうか、および固定幅または可変幅に分類できます。ASCII互換とは、コンテキストに関係なく、0x00から0x7Fまでの値を持つシングルバイトがASCIIの場合と同じ文字をエンコードすることを意味します。おそらく回避できるのであれば、ASCII互換ではないテキストエンコーディングとは何の関係もありません。ASCIIを期待する素朴なプログラムは、壊滅的な、しばしばセキュリティを破るような方法でそれらを誤解する傾向があります。これらは現在非推奨になっているため、(たとえば)HTML5は、UTF-16を除いて、パブリックWebでの使用を禁止しています。もうそれらについて話すつもりはありません。
固定幅エンコーディングとは、どのように聞こえるかを意味します。すべての文字は同じバイト数を使用してエンコードされます。ASCII互換であるためには、fixed-withエンコーディングは、1バイトのみを使用してすべての文字をエンコードする必要があるため、256文字を超えることはできません。現在最も一般的なこのようなエンコーディングは、 ISO8859-1の拡張であるWindows-1252です。
今日知っておく価値のある可変幅ASCII互換エンコーディングは1つだけですが、それは非常に重要です。UTF-8は、すべてのUnicodeをASCII互換エンコーディングにパックします。あなたがそれを管理することができれば、あなたは本当にこれを使いたいです。
最後に、「ASCII」は現在、元の標準(ANSI X3.4-1968)ではなく、Unicodeから実用的な定義を採用しています。これは、歴史的にASCII127文字のレパートリーに数十のバリエーションがあったためです。句読点は、フランス語のテキストの送信を容易にするためにアクセント付き文字に置き換えられる場合があります。これらのバリエーションはすべて廃止されており、「ASCII」とは、値が0x00から0x7FのバイトがUnicodeコードポイントU+0000からU+007Fをエンコードすることを意味します。これはおそらく、技術標準を作成していることに気付いた場合にのみ問題になります。
ASCIIの歴史とそれに先行するエンコーディングに興味がある場合は、「The Evolution of Character Codes、1874-1968」(samizdatのコピー(http://falsedoor.com/doc/ascii_evolution-of- ))から始めてください。 character-codes.pdf)そしてその参照を追跡します(その多くはオンラインでは入手できず、大学の図書館にアクセスしても見つけるのが難しいかもしれません、私は残念に思います)。
Linuxでは次のman ascii
ように述べています。
ASCIIは、情報交換のためのアメリカの標準コードです。これは7ビットのコードです。
元のASCIIテーブルは7ビットでエンコードされているため、128文字です。
現在、ほとんどのリーダー/エディターは「拡張」ASCIIテーブル(ISO 8859-1から)を使用しています。これは8ビットでエンコードされ、256文字(Á、Ä、Œ、é、è、およびヨーロッパ言語で役立つその他の文字を含む)を使用します。数学的なグリフやその他の記号も同様です)。
UTF-8は基本ASCIIテーブルと同じエンコーディングを使用しますが(両方のコードでAを意味し0x41
ます)、「ラテン文字拡張A」ブロックの同じエンコーディングを共有しません。これにより、アラカルトやピニャータなどの単語に奇妙な文字が表示されることがあります。
ASCIIエンコードは7ビットですが、実際には、ASCIIでエンコードされた文字は7ビットのグループに格納されません。代わりに、1つのASCIIが1バイトに格納され、MSBは通常0に設定されます(はい、ASCIIでは無駄になります)。
これを確認するには、テキストエディタでASCII文字セットに文字列を入力し、エンコーディングをASCIIに設定して、2進数または16進数を表示します。
余談ですが、(厳密に)ASCIIエンコーディングの使用は現在では一般的ではなく、UTF-8が採用されています(これは上記のMSBを無駄にしません-実際、MSBが1の場合、コードポイントは1バイト以上でエンコードされていることを示します)。
元のASCIIコードは、0から127までの番号が付けられた128の異なる文字を提供しました。ASCIIと7ビットは同義です。8ビットバイトが共通のストレージ要素であるため、ASCIIは外国語やその他の記号に使用される128文字の追加の余地を残します。
しかし、7ビットコードは8ビットコードより前に作成されたものです。ASCIIは、情報交換のためのAmericanStandardCodeの略です。初期のインターネットメールシステムでは、7ビットASCIIコードのみをサポートしていました。
これは、そのようなシステム上でプログラムやマルチメディアファイルを実行できるためです。これらのシステムは8ビットのバイトを使用しますが、 MIME、uucoding、BinHexなどのコーディング方法を使用して7ビット形式に変換する必要があります。これは、8ビット文字が7ビット文字に変換されたことを意味し、それらをエンコードするために余分なバイトが追加されます。
ASCIIを7ビットコードと呼ぶ場合、左端のビットが符号ビットとして使用されるため、7ビットでは最大127まで書き込むことができます。
これは、ASCIIの最大値が0〜255であるため、-126〜127を意味します。これは、最後のビットが符号ビットと見なされる場合にのみ、7ビットの引数で満たすことができます。