2017-11-04 19 views
0

「文字コードの問題に関するチュートリアル」(http://jkorpela.fi/chars.html#code)という記事で、「文字コード」/「コードポイント」と「文字エンコード」という用語が説明されています。ASCIIコードポイントと文字コードの比較

前者は文字に割り当てられた単なる整数です。たとえば、65文字A文字コードは、そのようなコードポイントが1バイト以上のバイトでどのように表されるかを定義します。

古いASCIIでは、「ASCII規格で指定された文字エンコーディングは非常に簡単で、コード番号が255を超えない文字コードで最も明白です。各コード番号は同じ値を持つオクテット。」

だから

65 Iは、127個のコード・ポイントが存在するASCII 127個の文字を有するので、各コードポイントが常にあるAのコードポイント1000 0001

として符号化されることになるで1バイトでエンコードされます。

私はASCIIで文字をエンコードするには、次の手順を持って、これを要約した場合:

  1. は、各文字(例えばA-> 65)に番号(コードポイント)を割り当て
  2. で文字をエンコード同じ値(例えば1000年0001)は、バイト

だから、文字AとBのために、それは

Aだろう - > 65 - > 1000年0001 B - > 66 - > 1000 0010

私の質問は:ASCIIのコードポイントとエンコーディングの

なぜ、この分離? ASCIIにはエンコードが1つしかありません。だから、少なくともASCIIの場合、なぜ中間ステップ(整数へのマップ)が行われたのかはわかりません。

Aのようなダイレクトエンコーディング - > 1000年0001 B - > 1000年0010

も可能かないでしょうか? ASCII文字に複数のエンコーディングを使用する場合、分離は合理的ですが、1つのエンコーディング形式では意味がありません。

答えて

0

あなたはそうです。各概念は、特定のエンコーディングのための識別可能な実装を必ずしも必要としません。しかし、一般的に文字セットやエンコーディングについて議論するときには、すべての概念を区別することは良いことです。

実際には、ASCIIは2つのエンコード(7ビットと8ビットの1つ)を持つと考えることができます。 7ビットは、バイトの8番目のビットにパリティビットを持つ方式とともに使用されました。 Unicodeは、UTF-8、UTF-16、UTF-32など、多くのエンコーディングを持つことで有名です。

コード単位がありません。符号化は、コードポイントをコードユニットのシーケンスにマッピングする。コード単位は固定サイズの整数です。ご存知のように、8ビットを超える整数はバイトオーダー(別名エンディアン)を持っています。これは、ビッグエンディアンとリトルエンディアンのバリエーションを持つUTF-16とUTF-32につながります。


コンピュータ化されたテキストの基本規則:ファイルまたはストリームが書き込まれたエンコーディングを読み込みます。テキストを表すバイトには、宣言、標準、慣例、仕様などのエンコーディングに関する知識が必要です。


ASCIIコードには128のコードポイントがあります。ほとんどの場合、ASCIIが記述されていますが、正しくはありません。 ASCIIまたは訂正の仕様を要求してください。

+0

ASCIIのような1バイトのエンコーディングでは、65のようなコードポイントとそれに対応するエンコーディングを区別する利点はありませんか? – knowledge

+0

ASCIIが唯一の文字セットだった場合はyesです。しかし、それは決して唯一のキャラクターセットではありません。概念には異なる属性があります。たとえば、コードポイントをカウントするのは便利ですが、エンコーディングのバイト値はカウントしないでください。キャラクタセットセット間でコードポイントを受け取ることができましたが、コードユニットを比較すると、それは全く異なるレベルになります。 –