1. ホーム
  2. character-encoding

[解決済み] ASCIIコードは7ビットなのか8ビットなのか?

2022-07-20 22:23:18

質問

ASCIIは8ビットの文字符号化方式だと先生に言われました。しかし、それは0-127のコードに対してのみ定義されており、7ビットに収まることを意味します。つまり、ASCII は実際には 7 ビットのコードであると主張することはできないのでしょうか。

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

どのように解決するのですか?

ASCII は、もともと 7 ビット コードとして考案されました。 これは 8 ビット バイトが一般的になるかなり前のことで、1990 年代になっても、テキストの各バイトの 8 ビット目を自分の目的のために使用できると想定したソフトウェアを見つけることができました ("not 8-bit clean")。 現在では、人々は と考えています。 を、バイト 0x80 から 0xFF が定義された意味を持たない 8 ビット コードと考える人がいますが、それは レトコン .

8ビット目を利用したテキストエンコーディングは数十種類あり、ASCII互換か非互換か、固定幅か可変幅かに分類されます。 ASCII互換とは 文脈に関係なく 0x00 から 0x7F までの値を持つ 1 バイトが、ASCII と同じ文字をエンコードすることを意味します。 ASCII 互換でないテキスト エンコーディングとは、できる限り関わりたくないものです。ASCII を期待する素朴なプログラムは、致命的な、しばしばセキュリティを破るような方法で誤読する傾向があります。 ASCIIを期待する素朴なプログラムは、しばしばセキュリティ上致命的な誤認をしがちです。最近では非推奨のため、(例えば) HTML5では一般向けウェブでの使用が禁止されていますが、不幸にも UTF-16 . もうこれ以上話すことはないでしょう。

固定幅のエンコーディングとは、その名の通り、すべての文字が同じバイト数でエンコードされることを意味します。 ASCII との互換性を保つために、固定幅エンコーディングはすべての文字を 1 バイトだけを使ってエンコードする必要があります。 このようなエンコーディングで現在最も一般的なものは Windows-1252 の拡張である ISO 8859-1 .

現在、知る価値のある可変幅の ASCII 互換エンコーディングは一つだけですが、これは非常に重要です。 UTF-8 これは、すべての Unicode を ASCII 互換のエンコーディングにパックしたものです。 管理できるのであれば、本当にこれを使いたいものです。

最後の注意点として、quot;ASCII" は現在では、その 実用的な というのも、歴史的には、ASCII の 127 文字のレパートリーには数十のバリエーションが存在したからです。これらのバリエーションはすべて時代遅れで、0x00から0x7Fの値を持つバイトがUnicodeのコードポイントU+0000からU+007Fをエンコードしていることを意味しているのです。 これはおそらく、技術標準を書くことになった場合にのみ重要なことでしょう。

ASCII とそれ以前のエンコーディングの歴史に興味がある場合は、論文 "The Evolution of Character Codes, 1874-1968" (samizdat copy at ASCII) から始めてみてください。 http://falsedoor.com/doc/ascii_evolution-of-character-codes.pdf を参照し、その参考文献 (その多くはオンラインでは入手できず、残念ながら大学の図書館にアクセスしても見つけるのは難しいかもしれません) を追いかけることです。)