web-dev-qa-db-ja.com

ASCIIコードは7ビットですか、8ビットですか?

私の先生は、ASCIIは8ビット文字コード体系だと言った。ただし、0-127コードに対してのみ定義されているため、7ビットに収まります。 ASCIIビットは実際には7ビットコードであると主張することはできませんか?

ASCIIが8ビットコードであると言うとき、何を言うのでしょうか。

86
Anurag Kalia

ASCII は、実際には7ビットコードとして最初に考案されました。これは8ビットバイトが広く普及する前に行われ、1990年代に入っても、テキストの各バイトの8ビット目を独自の目的で使用できると想定していたソフトウェアが見つかりました(「8ビットではない」)。最近の人々それについて考えてくださいバイト0x80から0xFFが定義された意味を持たない8ビットコーディングとしてですが、それは retcon です。

8番目のビットを使用するテキストエンコーディングは多数あります。 ASCII互換または非互換、および固定幅または可変幅として分類できます。 ASCII互換とは、コンテキストに関係なくで、0x00から0x7Fまでの値を持つシングルバイトが、ASCIIと同じ文字をエンコードすることを意味します。 ASCII互換性のないテキストエンコーディングを回避できる可能性がある場合は、それとは何の関係もありません。 ASCIIを期待する単純なプログラムは、壊滅的な、しばしばセキュリティを破るような方法でそれらを誤解する傾向があります。これらは非推奨となっているため、残念ながら TF-16 を除き、HTML5はパブリックWebでの使用を禁止しています。私はそれらについてもう話すつもりはありません。

固定幅のエンコードとは、すべての文字が同じバイト数を使用してエンコードされるという意味です。 ASCII互換であるためには、fixed-withエンコーディングは1バイトのみを使用してすべての文字をエンコードする必要があるため、256文字を超えることはできません。現在最も一般的なこのようなエンコーディングは、 Windows-1252ISO 8859-1 の拡張です。

今日知っておく価値のある可変幅ASCII互換エンコーディングは1つだけですが、それは非常に重要です: TF-8 。これはすべてのUnicodeをASCII互換エンコーディングにパックします。あなたがそれを管理できるなら、あなたは本当にこれを使いたいです。

最後の注意として、「ASCII」は、元々の標準(ANSI X3.4-1968)ではなく、Unicodeからpractical定義を取ります。これは、歴史的にASCII 127文字のレパートリー-たとえば、句読点の一部は、フランス語のテキストの送信を容易にするためにアクセント付き文字に置き換えられます。現在、これらのバリエーションはすべて廃止されており、人々が「ASCII」と言うとき、値0x00〜0x7FのバイトはUnicodeコードポイントU + 0000〜U + 007Fをエンコードすることを意味します。これはおそらく、技術標準を作成していることに気付いた場合にのみ重要です。

ASCIIの歴史とそれに先行するエンコーディングに興味がある場合は、「文字コードの進化、1874-1968」という論文から始めてください(samizdat copy at http:// falsedoor.com/doc/ascii_evolution-of-character-codes.pdf )その後、その参照を追跡します(その多くはオンラインで利用できず、大学図書館にアクセスしても見つけにくいかもしれません、と後悔しています)。

78
zwol

Linuxではman asciiのコメント:

ASCIIは、情報交換のためのアメリカ標準コードです。これは7ビットコードです。

13
BeniBela

元のASCIIテーブルは7ビットでエンコードされているため、128文字です。

現在、ほとんどのリーダー/エディターは、「拡張」ASCIIテーブル(fromISO 8859-1)を使用します。これは8ビットでエンコードされます=および256文字(ÁÄŒéè、およびヨーロッパ言語に役立つその他の文字、および数学的なグリフやその他の記号)。

UTF-8は基本的なASCIIテーブルと同じエンコードを使用しますが(両方のコードで0x41Aを意味します)、 「Latin Extended-A」ブロックと同じエンコーディングを共有します。これにより、アラカルトまたはpiñataなどの単語に奇妙な文字が表示されることがあります。

9
Guillaume

ASCIIエンコードは7ビットですが、実際には、ASCIIでエンコードされた文字は7ビットのグループに保存されません。代わりに、1つのASCIIが1バイトに格納され、MSBは通常0に設定されます(はい、ASCIIで無駄になります)。

これを確認するには、テキストエディターでASCII文字セットに文字列を入力し、エンコードをASCIIに設定し、バイナリ/ 16進数を表示します。
enter image description here

余談:(厳密に)ASCIIエンコーディングを使用することは一般的ではなく、UTF-8を支持しています(not上記のMSB-実際、1のMSBは、コードポイントが1バイト以上でエンコードされていることを示します。

1
flow2k

元のASCIIコードは、0から127までの128の異なる文字を提供しました。ASCII 7ビットは同義語です。8ビットバイトが共通のストレージ要素であるため、ASCII外国語やその他の記号に使用される追加の文字。しかし、7ビットコードは、8ビットコードの前に作成されたオリジナルです。 ASCIIは、情報交換のためのアメリカ標準コードの略です。初期のインターネットメールシステムでは、7ビットのASCIIコードのみをサポートしていました。これらのシステムは8ビットのバイトを使用しますが、MIME、UUcoding、BinHexなどのコーディング方法を使用して、7ビット形式に変換する必要があります。これは、8ビットが7ビット文字に変換され、余分なバイトが追加されてエンコードされることを意味します。

0
brookey