2017-08-25 3 views
1

私が分かっている限り、コード化された文字セットは、(抽象的な)文字(例えば、ユニコードのコードポイント00FCへのドイツ語の文字)に数字(コードポイントと呼ばれる)をマッピング/割り当てます。(コード化された)文字セット - ユニコードのコードポイントにマッピングする理由

このコードポイントが異なる方法で(例えば、バイトパターンで表される)符号化することができる。

UTF-8(1バイト)、UTF-16(2バイト)とUTF-32(4バイト)

そこでプロセスである:

(要約)文字コード・ポイントへ--->マップ(符号化された)文字セット - 1コードポイントの>エンコーディング... nバイト

なぜ、この中間段階コードポイントの? (抽象)文字が1 ... nバイトに直接マッピングされないのはなぜですか?

(アブストラクト)文字 - >マップ1 ... nバイト

この中間段階(文字に番号を割り当てる)が、他の(符号化された)文字セットで行われます。だから、それには十分な理由があるはずです。

バイトへの直接マッピングが行われない理由、およびこの中間段階を持たず直接バイトにマッピングされる文字セットがある理由を理解したいと思います。事前に

おかげで...

+0

[絶対に絶対最小すべてのソフトウェア開発、ポジティブUnicodeと文字セット(を知っている必要があります言い訳はありません!)](https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character- –

答えて

0

なぜ直接バイトにマッピングされていない(抽象)の文字がありますか?

これを行うには、すべての可能なシナリオで最も合意した1バイトのエンコードスキームが必要です。

私たちはそれが真実であることから非常に遠い方法です。 UTF-8、-16、および-32は決して離れていくことのない他のすべてのレガシーエンコードはもちろん、さまざまな強みを持ち、異なるコミュニティによって異なる目的で使用されます。

複数のバイトエンコーディングが不可避的に使用されている場合は、それらの背後に統一コード文字セットが必要です。そのため、各エンコーディングはその文字セットに前後にマッピングできます。別の方法として、エンコーディングのペアごとにマッピングテーブルを組み合わせて爆発的に展開する必要があります。

(それはだ、我々はUnicodeの前に持っていたものである。表は不完全な、非可逆と矛盾しなかった。それは良い時代ではなかった。)

+0

私は一般的に、バイト列(1 ... nバイト)に直接マップされていない(抽象)文字を意味します。私。コードポイント65(0x41)にマップするA(抽象的な文字)がある場合。今では、自分のコードポイントをバイトシーケンスとしてどのように表現するかを決めなければなりません。このコードポイントを1バイト(0100 0001)または2バイト(0000 0000 0100 0001)にmmapできます。なぜこの中間的な整数へのマッピングですか?私は直接1つまたは2つのバイトにマップすることができます。 – knowledge

+0

もう一度、神に似た力が1世紀前に戻って、可能なキャラクタごとに同じバイトシーケンスにすべての人が同意するように強制すると、これも可能です。その能力がない場合は、各文字に複数の可能なバイトエンコーディングがあるため、各文字を識別して順序付けし、それらの間のマッピングを解決できるようにする必要があります。大文字のラテン 'a'文字を参照する唯一の方法は、「UTF-16LEバイト表現が0x41,0x00の文字」というだけのことです。 – bobince

+0

あなたの答えをありがとう。なぜ私は各文字を識別するための番号が必要ですか?私はASCIIで "大文字A"、Unicodeで "大文字A"、または文字を識別するためにLatin-1で "大文字A"と言うことができます。 I.私が私のキャラクターの「名前」とその基礎となる文字セットを知っていれば、そのキャラクターも同様に識別されます。数字は文字セット内の文字を識別する別の方法ですか? (大文字Aの場合は65など)。 なぜ、数字だけでなく "名前"ですか? – knowledge

関連する問題