Code unit (コード単位)

コード単位 とは、文字エンコーディングシステムで用いられる(UTF-8 や UTF-16 などの)基本的構成要素です。文字エンコーディングシステムは Unicode コードポイントをエンコードするためにひとつもしくは複数のコード単位を用います。

UTF-16 (JavaScript 文字列で用いられるエンコーディングシステム)では、コード単位は 16 ビットの値です。このことはつまり、文字列にインデックスを付けたり、文字列の長さを取得するためのオペレーションは、これらの 16 ビット単位で操作されることを意味します。これらの単位は我々が文字列と考えるものと常に 1 対 1 で関連付けるわけではありません。

例えば、強調表示のような発音記号を含む文字列は、 2 つの Unicode コードポイントを用いて表されることがあります。

js
const myString = "\u006E\u0303";
console.log(myString); // ñ
console.log(myString.length); // 2

また、 Unicode で定義されている全てのコードポイントが 16 ビットに収まるわけではないため、多くの Unicode コードポイントは サロゲートペア と呼ばれる UTF-16 コード単位のペアでエンコードされています:

js
const face = "🥵";
console.log(face.length); // 2

JavaScript の String オブジェクトの codePointAt() メソッドは、そのエンコードされた形から Unicode コードポイントを取得することができます。

js
const face = "🥵";
console.log(face.codePointAt(0)); // 129397

関連情報