UTF-8とUnicodeの違いは何ですか?質問する

UTF-8とUnicodeの違いは何ですか?質問する

私は人々から相反する意見を聞いたことがある -ウィキペディア UTF-8ページ。

それらは同じものですよね? 誰か説明してもらえますか?

ベストアンサー1

他の人の回答を詳しく説明すると、

コンピュータが理想的に表示できる文字が多数ある言語が数多くあります。Unicode は各文字に一意の番号、つまりコード ポイントを割り当てます。

コンピューターは、このような数値をバイトとして扱います。ここでは少し歴史を飛ばし、メモリ アドレス指定の問題を無視すると、8 ビット コンピューターは 8 ビット バイトをハードウェア上で簡単に表現できる最大の数値単位として扱い、16 ビット コンピューターはそれを 2 バイトに拡張する、という具合になります。

ASCII などの古い文字エンコードは、8 ビット以前の時代のものであり、当時のコンピューターの主流言語である英語を 0 から 127 までの数字 (7 ビット) に詰め込もうとしています。アルファベットの大文字と小文字、数字、句読点の 26 文字で、これはかなりうまく機能しました。ASCII は、英語以外の言語用に 8 番目のビットで拡張されましたが、この拡張によって追加された 128 の数字/コード ポイントは、表示される言語に応じて異なる文字にマッピングされます。ISO-8859 標準は、このマッピングの最も一般的な形式です。ISO-8859-1 および ISO-8859-15 (ISO-Latin-1、latin1 とも呼ばれ、8859 ISO 標準にも 2 つの異なるバージョンがあります)。

しかし、複数の言語の文字を表現したい場合にはそれだけでは不十分で、利用可能なすべての文字を 1 バイトに詰め込むのはうまくいきません。

基本的に、エンコーディングには 2 種類あります。1 つは、ビットを追加して値の範囲を拡張するものです。このようなエンコーディングの例としては、UCS2 (2 バイト = 16 ビット) や UCS4 (4 バイト = 32 ビット) などがあります。これらのエンコーディングは、制限が大幅に高くなっているにもかかわらず、値の範囲が依然として制限されているため、本質的に ASCII および ISO-8859 標準と同じ問題を抱えています。

もう 1 つのタイプのエンコーディングでは、文字ごとに可変数のバイトを使用します。このエンコーディングで最もよく知られているのは UTF エンコーディングです。すべての UTF エンコーディングは、ほぼ同じように機能します。つまり、単位サイズを選択します。UTF-8 の場合は 8 ビット、UTF-16 の場合は 16 ビット、UTF-32 の場合は 32 ビットです。次に、標準ではこれらのビットのいくつかをフラグとして定義します。フラグが設定されている場合、単位シーケンス内の次の単位は同じ文字の一部と見なされます。フラグが設定されていない場合、この単位は 1 つの文字を完全に表します。したがって、最も一般的な (英語の) 文字は、UTF-8 では 1 バイト (UTF-16 では 2 バイト、UTF-32 では 4 バイト) しか占有しませんが、他の言語の文字は 6 バイト以上を占有する場合があります。

マルチバイト エンコーディング (上記の説明の後ではマルチ ユニットと言うべきでしょう) には、比較的スペース効率が良いという利点がありますが、部分文字列の検索、比較などの操作を実行する前に、文字を Unicode コード ポイントにデコードする必要があるという欠点があります (ただし、ショートカットはいくつかあります)。

UCS 標準と UTF 標準はどちらも、Unicode で定義されているコード ポイントをエンコードします。理論上は、これらのエンコーディングを使用して任意の数値 (エンコーディングがサポートする範囲内) をエンコードできますが、もちろんこれらのエンコーディングは Unicode コード ポイントをエンコードするために作成されています。これが、これらのエンコーディング間の関係です。

Windows はいわゆる「Unicode」文字列を UTF-16 文字列として処理しますが、最近の UNIX のほとんどはデフォルトで UTF-8 を使用しています。HTTP などの通信プロトコルは、UTF-8 の単位サイズが ASCII と同じであり、そのようなプロトコルのほとんどが ASCII 時代に設計されたため、UTF-8 で最もよく機能する傾向があります。一方、UTF-16 は、すべての現行言語を表現する場合に、平均的なスペース/処理パフォーマンスが最も優れています。

Unicode 標準では、32 ビットで表現できるよりも少ないコード ポイントが定義されています。したがって、UTF-32 では複数単位の文字を扱う必要はほとんどないため、実用上は UTF-32 と UCS4 は同じエンコーディングになりました。

詳細が明らかになれば幸いです。

おすすめ記事