質問: 質問は「**パソコンで文字を扱うときにUnicodeのコードポイントがあるのになぜさらにUTF-8などによる変換が必要なのか**」ということです。 **以下その疑問に至った経緯です。** 今までUnicodeとUTF-8の違いをはっきりとさせずに過ごしてきたので、ふと調べてみました。 その結果、 ``` Unicode:世界中の文字と固有のコードポイントと言われる数字を対応させたもの。 UTF-8:コードポイントをパソコンが認識できるような数字(符号)に変換させる方法の1つ。 ``` というふうに理解しています。つまり、 文字→(Unicodeによる変換)→コードポイント→(UTF-8などによる変換)→符号 で、パソコンはこの符号を認識しているという具合です。 ただここで、疑問に思ったのは**Unicodeによって文字が一意に数字(コードポイント)に変換されているのに、 そこからわざわざUTF-8などを使ってまた違う数字(符号)になぜ変換するのでしょうか。** UTF-8に至っては平仮名はコードポイントでは2バイトなのにUTF-8によって3バイトになってしまいます。 UTF-16でも2バイトのままです。 **そのままコードポイントをパソコンが使うのは良くないのでしょうか。** **これはUTF-8などによって符号化した方がバイト数が圧縮できる場合(上の例ではなっていないが。)があるということでしょうか?** お手数ですが、ご回答よろしくお願いいたします。
回答: > > そのままコードポイントをパソコンが使うのは良くないのでしょうか。 > > > はい、そういう方式もあって、UTF-32といいます。全文字が4バイトとなります。 > > これはUTF-8などによって符号化した方がバイト数が圧縮できる場合(上の例ではなっていないが。)があるということでしょうか? > > > はい、そのとおりです。UTF-32では全文字が4バイトですが、UTF-8ではASCII領域がそのまま1バイトで表現されて、**ASCIIとの互換性**をも有するようになっています。 なお、UTF-16は**サロゲートペア**(追加面の文字について、コードポイント2つを使って表現する)がありますので、16ビットのコード1つが1文字と対応する**わけではありません**。