同じ文字集合に複数のエンコード方式が存在する理由
UTF-8、UTF-16、UTF-32はいずれも同じUnicodeコードポイントを表現しますが、保存効率と処理のしやすさのトレードオフが異なります。UTF-8は英語主体のテキストでコンパクトでありウェブの主流ですが、UTF-16はWindowsやJavaなど古くからのプラットフォームAPIに組み込まれているため、どちらも一方に置き換わることなく広く使われ続けています。
1つの絵文字が複数のコードポイントでできている理由
特定の肌の色の親指を立てた絵文字や家族の絵文字のような多くの現代的な絵文字は、実際には複数のコードポイントをゼロ幅接合子という特殊な文字でつないだ組み合わせで、対応するソフトウェア上では1つの絵文字として表示されます。見た目は似ていても内部のコードポイント列の長さが異なる絵文字がある理由はここにあります。
よくある質問
文字列の文字数とバイト数が一致しないのはなぜですか?
UTF-8のようなエンコードは文字ごとに使うバイト数が異なるためです。半角英数字だけの文字列は文字数とバイト数が一致しますが、アクセント付き文字や日本語、絵文字が加わると、見た目の文字数以上にバイト数が増えていきます。
サロゲートペアとは何のことですか?
UTF-16が通常の2バイト単位に収まらない文字を表現するための仕組みで、2つの特殊な2バイト単位を組み合わせて1つの文字として扱います。ソフトウェアがそれぞれを誤って別々の文字として扱うと、絵文字や珍しい文字が途中で分断され、表示が壊れることがあります。