絵文字の文字列長:1つの絵文字が7つ以上のコードポイントになる理由
なぜ1つの絵文字のJavaScript .lengthが11以上になるのかを発見します。シンプルな絵文字、スキントーン修飾子、ZWJシーケンス、国旗絵文字をカバーします。
Emoji
詳細な説明
絵文字の長さ:複雑です
絵文字は文字列長の驚きの最も一般的な原因です。1文字に見えるものが2から25以上のUTF-8バイトになることがあります。
絵文字の複雑さレベル
レベル1:シンプルな絵文字(1コードポイント、2 UTF-16コードユニット)
😀 U+1F600 .length = 2 UTF-8: 4バイト
レベル2:スキントーン付き(2コードポイント、4 UTF-16コードユニット)
👋🏾 U+1F44B U+1F3FE .length = 4 UTF-8: 8バイト
レベル3:ZWJシーケンス(U+200Dで結合された複数のコードポイント)
👨💻 U+1F468 U+200D U+1F4BB .length = 5 UTF-8: 11バイト
(男性テクノロジスト = 男性 + ZWJ + ラップトップ)
レベル4:複雑な家族絵文字
👨👩👧👦 U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466
.length = 11 UTF-8: 25バイト 書記素: 1
国旗絵文字(地域インジケーター)
国旗絵文字は地域インジケーターシンボル(U+1F1E6–U+1F1FF)のペアを使用:
🇯🇵 = U+1F1EF U+1F1F5 (JP) .length = 4 UTF-8: 8バイト
🇺🇸 = U+1F1FA U+1F1F8 (US) .length = 4 UTF-8: 8バイト
比較表
| 絵文字 | 書記素 | コードポイント | .length | UTF-8バイト |
|---|---|---|---|---|
| 😀 | 1 | 1 | 2 | 4 |
| 👋🏾 | 1 | 2 | 4 | 8 |
| 🇯🇵 | 1 | 2 | 4 | 8 |
| 👨💻 | 1 | 3 | 5 | 11 |
| 👨👩👧👦 | 1 | 7 | 11 | 25 |
なぜ重要か
Twitterの「280文字」制限は実際には.lengthではなく加重スキームでカウントします。文字カウンターを構築する場合、常にコードユニットやコードポイントではなく書記素クラスターをカウントしてください。
ユースケース
ソーシャルメディアアプリケーション、チャットシステム、または絵文字入力を許可する文字制限付きUIを構築する際、絵文字エンコーディングの複雑さを理解することは、正確な文字カウント、ストレージ推定、データ切り詰めの防止に不可欠です。