Unicode / 文字コード解析
12 コードポイント / 13 UTF-16 コード単位 / 19 UTF-8 バイト
| # | 文字 | コードポイント | UTF-8 | UTF-16 LE | 分類 |
|---|---|---|---|---|---|
| 0 | H | U+0048 | 48(1B) | 48 00 | ASCII 印字可能 |
| 1 | e | U+0065 | 65(1B) | 65 00 | ASCII 印字可能 |
| 2 | l | U+006C | 6C(1B) | 6C 00 | ASCII 印字可能 |
| 3 | l | U+006C | 6C(1B) | 6C 00 | ASCII 印字可能 |
| 4 | o | U+006F | 6F(1B) | 6F 00 | ASCII 印字可能 |
| 5 | , | U+002C | 2C(1B) | 2C 00 | ASCII 印字可能 |
| 6 | U+0020 | 20(1B) | 20 00 | スペース | |
| 7 | 世 | U+4E16 | E4 B8 96(3B) | 16 4E | CJK 統合漢字 |
| 8 | 界 | U+754C | E7 95 8C(3B) | 4C 75 | CJK 統合漢字 |
| 9 | ! | U+0021 | 21(1B) | 21 00 | ASCII 印字可能 |
| 10 | U+0020 | 20(1B) | 20 00 | スペース | |
| 11 | 🌍 | U+1F30D | F0 9F 8C 8D(4B) | 3C D8 0D DF | 雑多な記号と絵文字 |
Unicode と文字エンコーディングについて
Unicode
はすべての文字に一意の番号(コードポイント)を割り当てる国際標準です。
U+0041 のように U+ に続く16進数で表記します。
主なエンコーディング
- UTF-8: 可変長(1〜4バイト)。ASCII互換でウェブで最も広く使われる。
- UTF-16: 可変長(2または4バイト)。JavaScriptの内部表現。U+FFFF超の文字はサロゲートペアで表現。
- UTF-32: 固定長(4バイト)。全コードポイントを1対1で表現。
サロゲートペア
UTF-16では、U+10000以上の文字(絵文字など)はサロゲートペアと呼ばれる2つのコード単位(合計4バイト)で表現されます。
JavaScriptで str.length が文字数と一致しない原因の多くはサロゲートペアです。
スプレッド構文 [...str] を使うとコードポイント単位で正しく反復できます。