14

文字セットの名前は「Unicode」で、「UTF-8」は Unicode 文字セットの特定のエンコーディングの名前だと思っていましたが、参照するときに「エンコーディング」と「文字セット」という用語が同じ意味で使用されているのをよく見かけます。 UTF-8に。

例えば、

<meta charset="UTF-8">

<?xml version="1.0" encoding="UTF-8" ?>
4

5 に答える 5

13

UTF-8 はエンコーディングまたは文字セットですか?

UTF-8 はエンコーディングであり、その用語はそれを定義する RFC で使用されています。これを以下に引用します。


「エンコーディング」と「文字セット」という用語が同じ意味で使用されているのをよく見かけます

Unicode が登場する前は、キリル文字やギリシャ文字などのアルファベット†を使用する場合、そのアルファベットの文字のみにエンコードされるエンコーディングを使用する必要がありました。したがって、 encodingcharsetという用語はしばしば混同されますが、意味は異なります。

ただし、クリンゴン語を除くほとんどの言語の文字が含まれているため、Unicode は通常、考慮する必要がある唯一の文字セットです。

† - 文字が話し言葉の音に直接対応する一種の *文字セット* であるアルファベット。

文字セットは、コード単位 (整数) から、書き言葉の文字、記号、グリフ、またはその他のマークへのマッピングです。Unicode は、21b 整数を Unicode コードポイントにマップする文字セットです。Unicode コンソーシアムの用語集では、次のように説明されています。

ユニコード

  1. 世界のすべての言語で使用される文字のデジタル表現の標準。Unicode は、任意の言語のテキストを格納、検索、および交換するための統一された手段を提供します。現在のすべてのコンピューターで使用されており、インターネット上でテキストを処理するための基盤となっています。Unicode は、Unicode コンソーシアム ( http://www.unicode.org ) によって開発および維持されています。
  2. Unicode コンソーシアムによって開発および維持されている、ソフトウェアの国際化およびローカリゼーションの標準に適用されるラベル。

エンコーディングは、文字列から文字列へのマッピングです。UTF-8 は、バイト文字列 (8b の整数) をコードポイントの文字列 (21b の整数) にマップするエンコーディングです。Unicode コンソーシアムはこれを「文字エンコード方式」と呼び、 RFC 3629で定義されています。

ただし、最初に提案された UCS のエンコーディングは、現在の多くのアプリケーションやプロトコルと互換性がなかったため、UTF-8 の開発につながりました。

于 2013-03-05T15:37:06.857 に答える
6

UTF-8は、一連の抽象整数(抽象文字を示すUnicodeコードポイント)をバイトのセットにエンコードするという意味で、エンコードです。(Unicodeのスペクタクルを通じて、 ISO-8859-1などの「文字セット」もテーブル駆動型の「エンコーディング」であると言えます。これは、少数のコードポイントをバイトとしてエンコードするという意味ですが、これは用語の乱用であり、おそらくあまり役​​に立ちません)。

整数のシーケンスは(ある基本的な意味で)「Unicode文字列」ですが、これらをディスクに保存したり、ネットワーク経由で送信したりするには、バイトのシーケンスとしてエンコードする必要があります。UTF-8はそれを行う1つの方法であり、UTF-16は別の方法です。1つのUnicode文字列は、2つの異なる方法でエンコードされている場合、2つの異なるバイトストリームとして表されます。


ここには複数の細かい答えがありますが、昨日、この問題を最小限のサイズに縮小するために時間を費やしたので、これはそのテキストを再利用する幸せな機会を提供します。

絶対最小すべてのソフトウェア開発者に関するJoelSpolskyの記事は、Unicodeと文字セット(言い訳なし!)について絶対に、積極的に知っておく必要があります。これは(確かに)前にここで言及されていますが、繰り返しになります。しかし、それは完全に最小限ではないと思います。

同僚に「unicode」を説明しなければならなかった2、3の機会に、イルミネーションの鍵となったのは抽象的なUnicodeコードポイントの概念でした。私の成功した説明の構造は次のようなものでした:

  • ユニコードコンソーシアムは(多くの苦痛と交渉をもって)使用中の文字の大部分に数字を与えることに成功しました。これらの番号は(専門用語)「コードポイント」と呼ばれます。

  • 「文字A」にはコードポイントがあり、これはフォントに依存しません。したがって、「A」と「a」のコードポイントは異なりますが、ローマン、ボールド、イタリック、セリフ、サンセリフ(非常に多くのセテラ)は区別されません。日本語の漢字、テングワール、クリンゴン文字(たとえば)にはコードポイントがあります(これは注目を集めています)。

  • 「Unicode文字列」は(概念的には)コードポイントのシーケンスです。これは数学的な整数のシーケンスです。これらがバイト、2バイト、または4バイトの単語であるかどうかを尋ねるのは意味がありません。シーケンスはコンピューターとは何の関係もありません。

  • ただし、その整数のシーケンスを誰かに送信したり、コンピューターのディスクに保存したりする場合は、それをエンコードするために何かを行う必要があります。数列を紙に書き留めることもできますが、この時点ではコンピューターに特化しましょう。これをコンピュータに保存または送信する場合は、これらの整数を一連のバイトに変換する必要があります。これを行うには複数の手順があり、これらの各手順は「エンコーディング」と呼ばれます。これらの「エンコーディング」の1つはUTF-8です。

  • 'Unicodeファイルを読み取る'とは、ディスク上の一連のバイトから始まり、概念的には一連の整数で終わることになります。'unicode file'が何らかの形でUTF-8でエンコードされるように示されている場合は、 RFC 3629で定義されているアルゴリズムを使用して、そのバイトシーケンスをデコードして整数シーケンスを取得する必要があります。'unicode string'に対する後続のすべての操作は、コードポイントのシーケンスに関して定義され、'UTF-8'としてディスク上で開始されたという事実は忘れられています。

于 2013-03-05T16:16:46.390 に答える
3

Unicode標準では、これをエンコード形式またはエンコードスキームと呼んでいます。Unicodeには単一の文字セット(Unicode文字セットまたはユニバーサル文字セットと呼ばれます)があり、すべてのUTFエンコード形式エンコードスキームでそのセット内のすべての文字をエンコードできます。

他の多くの用語と同様に、プログラマーはあちこちで用語を不適切に使用する傾向があるようです。これは、これのもう1つの例にすぎません。

于 2013-03-05T15:34:01.377 に答える
2

UTF-8 はエンコーディングです。ただし、エンコーディングは文字セットと呼ばれることが多いため、多くのプロトコルでは、charset文字エンコーディングを指定するパラメーターにパラメーター名を使用します。そのため、charsetは単なる識別子です。

于 2013-03-05T15:41:43.670 に答える