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


100

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

そして、ASCIIが8ビットコードであると言っているとき、私たちは何を言っているのですか?

回答:


90

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

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

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

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

最後の注記として、「ASCII」は今日、その実際の定義を元の標準(ANSI X3.4-1968)ではなくUnicodeから採用しています。これまで、ASCII 127文字のレパートリーには数十のバリエーションがありました。句読点は、フランス語のテキストの伝達を容易にするためにアクセント付き文字に置き換えられる場合があります。現在、これらのバリエーションはすべて陳腐化しており、人々が「ASCII」と言うとき、値0x00から0x7FまでのバイトがUnicodeコードポイントU + 0000からU + 007Fをエンコードすることを意味します。これはおそらく、技術基準を作成していることに気づいた場合にのみ問題になります。

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


1
ASCII noawadaysは7ビットですか、それとも8ビットですか?あなたは今、明らかに0x00-0x7Fを使用していると言います。しかし、先頭の0を数えますか?
Anurag Kalia 2013

8
それはあなたがどんな種類のペダントであるかによる。ASCII(ANSI X3.4-1968)をまだ公式に定義している仕様では、これを7ビットエンコーディングとして説明していますが、7ビットバイトを送信する人は誰もいません。最近の相互運用性により、8番目のビットはゼロでなければならないことが規定されています-できません。パリティビットなどに使用します。したがって、ASCIIを8ビットのエンコーディングとして記述し、その番号空間の上半分を「予約済み、使用しない」として残すことも同様に有効です。どちらの方法でも、上位ビットが設定されている8ビットバイトを送信すると、有効なASCII が送信されません
zwol 2013

1
(...しかし、UTF-8、ISO 8859-1、KOI8-Rなどの有効な何かを送信している可能性があります。)
zwol

1
以前は X3 として知られていたASC がNCITSに変換され、次にINCITSに変更されたため、標準化はINCITS 4-1986 [R2012]になりました。しかし、フランス語、ドイツ語、スペイン語などのアクセント付き文字が約12の7ビットバリアントは、ANSI / INCITSではなく、ISO / IEC 646およびECMA-6です。そして、Unicodeの最初の256文字のブロックを形成するのは8ビット(ISO / IEC)8859-1です。
dave_thompson_085

2
@ dave_thompson_085誰もがあなたと同じように知識を持っているわけではありません。つまり、「ASCII」または「X3.4-1968」を参照する古い技術ドキュメントや標準でさえ、国別のバリエーションを含めるつもりであるか、少なくともそれを明確に除外せず、議論につながる。したがって、重要な仕様を記述する必要がある場合、個人的にはASCIIの規範的な参照としてUnicodeを使用します。私が言ったのはそれだけです。
zwol

14

Linuxではman ascii言う:

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


9

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

現在、ほとんどの読者/編集者は、8ビットでエンコードされ、256文字(enjoyÄŒéèなどのヨーロッパ言語に役立つその他の文字を含む)を楽しむ「拡張」ASCIIテーブル(ISO 8859-1から)を使用しています。数学的なグリフおよびその他の記号として)。

UTF-8は、基本的なASCIIテーブルと同じエンコーディングを使用していますが(意味が0x41あるAは、の両方のコードで)、それは「ラテン文字拡張A」ブロックについて同じ符号を共有しません。これにより、アラカルトピニャータなどの奇妙な文字が表示されることがあります。


上記にはいくつかの間違いがあります。CPCP-1252にありますが、ISO 8859-1の一部ではありません。そして、Latin Extended-Aブロックは、Unicodeの最初の128または256文字ではありません。これは、これらがğ、ł、およびlikeのような文字を含む後の次のブロックです。
Richard Smith

いい視点ね!「Latin-1 Supplement」だったと思います。標準規格...
ギヨーム

1
「拡張ASCII」文字セットは多数あり、そのうちの1つだけがISO 8859-1です。テキストをエンコードおよびデコードするときは、どの特定の文字エンコードが使用されているかを知る必要があるため、この用語はほとんど意味がありません(さらに、拡張ASCII文字セットの場合もそうでない場合があります)。
トムブロジェット2018

2

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

これを確認するには、テキストエディターでASCII文字セットの文字列を入力し、エンコードをASCIIに設定して、バイナリ/ 16進数を表示します。
ここに画像の説明を入力してください

余談ですが、(厳密に)ASCIIエンコーディングの使用は一般的ではなくなり、UTF-8になりました(これは上記のMSBを浪費しませ -実際、MSBが1の場合、コードポイントが複数のバイトでエンコードされていることを示します)。


0

元のASCIIコードは、0〜127の番号が付けられた128の異なる文字を提供しました。8ビットバイトは共通のストレージ要素であるため、ASCIIは7ビットと同義です。しかし、7ビットのコードは8ビットのコードより前に作成されました。ASCIIは、情報交換用のアメリカ標準コードの略です。初期のインターネットメールシステムでは、7ビットのASCIIコードしかサポートしていませんでした。これは、プログラムとマルチメディアファイルをサックシステムで実行できるためです。これらのシステムは8ビットのバイトを使用しますが、MIME、UUcoding、BinHexなどのコーディング方法を使用して7ビット形式に変換する必要があります。これは、8ビットが7ビット文字に変換されたことを意味し、エンコードするためにバイトが追加されます。


-2

ASCIIを7ビットコードとして呼び出す場合、左端のビットが符号ビットとして使用されるため、7ビットでは最大127を書き込むことができます。これは、ASCIIの最大イマーム値が0〜255であるため、-126〜127を意味します。最後のビットが符号ビットと見なされた場合のみ、7ビットの引数で満たされます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.