web-dev-qa-db-ja.com

違うは何ですか ASCII とUnicode?

UnicodeとASCIIの正確な違いはわかりますか?

ASCIIは合計128文字(拡張セットでは256文字)です。

Unicode文字のサイズ指定はありますか?

337
Ashvitha

ASCIIは128文字を定義し、これは0から127の数字にマップされます。 Unicodeは2未満を定義します21 同様に、0から2の数字に対応する文字21 (すべての番号が現在割り当てられているわけではありませんが、予約されているものもあります)。

UnicodeはASCIIのスーパーセットであり、ASCIIの数字0〜128はUnicodeの場合と同じ意味を持ちます。たとえば、65という数字は「ラテン語の大文字のA」を意味します。

Unicode文字は通常1つの8ビットバイトに収まらないため、UTF-32やUTF-8など、Unicode文字をバイトシーケンスで格納する方法は多数あります。

441
Kerrek SB

whyASCIIとUnicodeが最初に作成されたのを理解することで、2つの違いを理解するのに役立ちました。

ASCII、Origins

他の回答で述べたように、ASCIIは7ビットを使用して文字を表します。 7ビットを使用することで、最大2 ^ 7(= 128)の異なる組み合わせを使用できます*。つまり、最大128文字を表すことができます。

待って、7ビット?しかし、なぜ1バイト(8ビット)ではないのですか?

最後のビット(8番目)は parity bit のようにエラーを回避するために使用されます。これは数年前に関係がありました。

ほとんどのASCII文字は、abc、ABC、123、?&!などのアルファベットの印刷可能文字です。その他は 制御文字 など キャリッジリターン、改行 、タブなど.

ASCIIのいくつかの文字のバイナリ表現を参照してください。

0100101 -> % (Percent Sign - 37)
1000001 -> A (Capital letter A - 65)
1000010 -> B (Capital letter B - 66)
1000011 -> C (Capital letter C - 67)
0001101 -> Carriage Return (13)

完全なASCIIテーブルを参照してください こちら

ASCIIは英語専用です。

何?なぜ英語のみですか?非常に多くの言語があります!

当時、コンピューター産業の中心はアメリカにあったからです。結果として、アクセント、またはá、ü、ç、ñなどのその他のマークをサポートする必要はありませんでした(別名 diacritics )。

ASCII拡張

一部の賢い人々は、8ビット目(パリティに使用されるビット)を使用して、言語をサポートするためにさらに文字をエンコードし始めました(たとえば、フランス語で "é"をサポートするため)。余分なビットを1つ使用するだけで、元のASCIIテーブルのサイズが2倍になり、最大256文字(2 ^ 8 = 256文字)にマップされました。以前のように2 ^ 7ではありません(128)。

10000010 -> é (e with acute accent - 130)
10100000 -> á (a with acute accent - 160)

この「以前の7ビットではなく8ビットに拡張されたASCII」の名前は、単に「拡張ASCII」または「8ビットASCII」と呼ばれることがあります。

@ Tom が下のコメントで指摘しているように、 " extended ASCII "のようなものはありませんが、これはこの8ビットのトリックを参照する簡単な方法です。 ISO 8859-1、ISO Latin-1とも呼ばれる など、8ビットASCIIテーブルには多くのバリエーションがあります。

Unicode、The Rise

ASCII Extendedは、ラテンアルファベットに基づく言語の問題を解決します。完全に異なるアルファベットを必要とする他の言語はどうでしょうか。ギリシャ語?ロシア?中国語と同類?

まったく新しい文字セットが必要だったでしょう...それがUnicodeの背後にある合理的な理由です。 Unicodeにはすべての言語のすべての文字が含まれているわけではありませんが、膨大な量の文字が含まれていることは確かです( この表を参照 )。

テキストをハードドライブに「Unicode」として保存することはできません。 Unicodeはテキストの抽象的な表現です。この抽象表現を「エンコード」する必要があります。そこで、 エンコード が作用します。

エンコーディング:UTF-8 vs UTF-16 vs UTF-32

この答え は、基本を説明する上でかなり良い仕事をしています:

  • UTF-8およびUTF-16は可変長エンコードです。
  • UTF-8では、文字は最低8ビットを占有できます。
  • UTF-16では、文字の長さは16ビットで始まります。
  • UTF-32は、32ビットの固定長エンコードです。

UTF-8は、最初の128文字にASCIIセットを使用します。これは、ASCIIテキストがUTF-8でも有効であることを意味するため、便利です。

ニーモニック:

  • UTF-8:最小8ビット。
  • UTF-16:最小16ビット。
  • UTF-32:最小および最大32ビット。

注意:

なぜ2 ^ 7?

これは一部の人にとって明らかですが、念のためです。 0または1で埋められた7つのスロットが使用可能です( Binary Code )。それぞれに2つの組み合わせがあります。 7つのスポットがある場合、2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 ^ 7 = 128の組み合わせがあります。これは、各ホイールが2つの数字のみを持つ7つのホイールを備えたコンビネーションロックと考えてください。

ソース: Wikipediaこの素晴らしいブログ記事 および Mocki 私が最初にこの要約を投稿した場所。

317
Matt

ASCIIには0〜127の128個のコードポイントがあります。これは単一の8ビットバイトに収まり、128〜255の値は他の文字に使用される傾向があります。互換性のない選択で、 コードページ 災害を引き起こします。あるコードページでエンコードされたテキストは、別のコードページを想定したり推測したりするプログラムでは正しく読み取ることができません。

Unicodeはこの惨事を解決するために生まれました。バージョン1は、通常16ビットでエンコードされた65536のコードポイントから始まりました。バージョン2で後に110万のコードポイントに拡張されました。現在のバージョンは6.3で、利用可能な110万のコードポイントのうち110,187を使用しています。それはもう16ビットに収まりません。

V2が登場したとき、16ビットでのエンコードが一般的でした。たとえば、MicrosoftやAppleのオペレーティングシステムで使用されていました。そしてJavaのような言語ランタイム。 v2の仕様では、この110万のコードポイントを16ビットにマッピングする方法が考案されました。 UTF-16と呼ばれるエンコーディング。1つのコードポイントで2バイトまたは4バイトを使用できる可変長エンコーディング。オリジナルのv1コードポイントは2バイトかかり、追加されたものは4バイトかかります。

* nixオペレーティングシステムやツールで使われているもう一つの非常に一般的な可変長エンコーディングはUTF-8です。コードポイントは1から4バイトの間で、元のASCIIコードは1バイトかかります。唯一の可変長でないエンコーディングはUTF-32で、コードポイントに4バイトかかります。それはかなり無駄であるのであまり使用されません。 UTF-1やUTF-7のように広く無視されているものがあります。

UTF-16/32エンコーディングの問題は、バイトの順序がテキストストリームを作成したマシンのエンディアンに依存することです。そのため、UTF-16BE、UTF-16LE、UTF-32BE、およびUTF-32LEの組み合わせを追加してください。

これらの異なるエンコーディングの選択を持つことは、UTFの選択が「最良」であるプログラマーの間での激しい議論と共に、コードページの惨事をある程度取り戻します。オペレーティングシステムのデフォルトとのそれらの関連付けはかなり線を引きます。 1つの対策は、BOM、Byte Order Mark、テキストストリームの先頭にある特殊なコードポイント(U + FEFF、幅0のスペース)の定義で、残りのストリームのエンコード方法を示します。これはUTFエンコーディングとエンディアンの両方を示しており、テキストレンダリングエンジンにとっては中立です。残念ながらそれはオプションであり、多くのプログラマーはそれを省略することを彼らの権利と主張するので事故はまだかなり一般的です。

87
Hans Passant

JavaはUnicodeをサポートしています。つまり、世界中のすべてのアルファベットをサポートしています。したがって、Javaのcharのサイズは2バイトです。範囲は0〜65535です。

enter image description here

25
Siddarth Kanted

ASCIIとUnicodeは2つの文字エンコーディングです。基本的には、差分文字をデジタルメディアで書き込み、保存、送信、および読み取りできるように、差分文字を2進数で表す方法に関する標準です。この2つの主な違いは、文字のエンコード方法とそれぞれに使用されるビット数です。 ASCIIはもともと各文字のエンコードに7ビットを使用していました。これは後にExtended ASCIIで元のものの明らかな不適切さに対処するために8に増やされました。これとは対照的に、Unicodeでは可変ビットエンコーディングプログラムを使用しており、32、16、および8ビットエンコーディングから選択できます。より多くのビットを使用するとより大きなファイルを犠牲にしてより多くの文字を使用することができますが、より少ないビットでは限られた選択肢しか与えられませんが、多くのスペースを節約できます。あなたが英語で大きな文書をエンコードしているならば、より少ないビット(すなわち、UTF-8またはASCII)を使うことはおそらく最もよいでしょう。

Unicodeが問題である主な理由の1つは、多くの非標準拡張ASCIIプログラムから発生しました。あなたがマイクロソフトや他のほとんどのソフトウェア会社によって使用されている普及しているページを使用していないのであれば、あなたは箱として表示されるあなたのキャラクターに関する問題に遭遇する可能性があります。 Unicodeは、すべての文字コードポイントが標準化されたため、この問題を事実上排除します。

Unicodeのもう1つの主な利点は、最大で、膨大な数の文字に対応できることです。このため、Unicodeには現在ほとんどの言語が含まれていますが、それ以上の余地があります。これは英語のような典型的な左から右へのスクリプトとアラビア語のような右から左へのスクリプトさえ含みます。中国語、日本語、および他の多くの異形もUnicode内で表されます。そのため、Unicodeは近いうちに置き換えられることはありません。

当時すでに広く使用されていた古いASCIIとの互換性を維持するために、Unicodeは最初の8ビットが最も普及しているASCIIページのものと一致するように設計されました。そのため、ASCIIエンコードファイルをUnicodeで開いても、ファイル内にエンコードされた正しい文字が得られます。これは、すでにASCIIを使用していた人たちのために新しい符号化規格を採用することの影響を少なくしたので、Unicodeの採用を促進しました。

概要:

1.ASCII uses an 8-bit encoding while Unicode uses a variable bit encoding.
2.Unicode is standardized while ASCII isn’t.
3.Unicode represents most written languages in the world while ASCII does not.
4.ASCII has its equivalent within Unicode.

撮影者: http://www.differencebetween.net/technology/software-technology/difference-between-unicode-and-ascii/#ixzz4zEjnxPhs

12
Nikhil Katre

ASCIIには、グラフィック文字と制御文字(制御コード)に割り当てられた128のコード位置があります。

Unicodeのコード位置は1,114,112です。それらのうちの約10万が現在文字に割り当てられており、そして多くのコードポイントが恒久的に非文字にされており(すなわち、いかなる文字をコード化するのにも使用されていない)。

ASCIIとUnicodeが 共通 を持つ唯一のものは以下のとおりです。1)それらは文字コードです。 2)Unicodeの最初の128のコード位置は、ASCIIの制御文字のコード位置が単に_に対応する名前で制御文字を示すように定義されていることを除いて、ASCIIと同じ意味を持つように定義されています。ASCIIの名前ですが、その意味はUnicodeでは定義されていません。

しかし時々、Unicodeは(Unicode標準でさえも)「ワイドASCII」として特徴付けられます。これは、UnicodeがASCIIと同じように universal の文字コードであることを意図しているという考えを伝えることを主な試みとするスローガンです(ただし、ASCIIの文字レパートリー)。異なったシステムやアプリケーションで異なったコードを使用したり、異なった言語を使用するのとは反対に、_は普遍的な用途には絶望的に不十分でした。

Unicodeはそのようなものとして、文字の「論理サイズ」のみを定義します。各文字は特定の範囲のコード番号を持ちます。これらのコード番号は、異なる転送エンコーディングを使用して表示できます。内部では、Unicode文字は通常、文字の範囲に応じて1文字あたり1または2個の16ビット量を使用して表されます。

11

Unicodeには120,000文字を超えるレパートリーが含まれているため、ASCIIは128文字を定義しています。

0
sphynx888