😀 絵文字→コードポイント変換
絵文字や文字列を1文字(書記素)ごとに分解し、各コードポイントの U+XXXX・10進・UTF-16サロゲートペア・UTF-8バイト列・名称を表示します。ZWJシーケンスや肌色修飾子、国旗(地域指標記号)、異体字セレクタといった「複数コードポイントの連なり」も可視化。すべてブラウザ内で処理し、入力は送信しません。
入力
概要
—
出力フォーマット
用語のはやわかり
1つの絵文字は、1つ以上のコードポイントの並びで表されます。上の要素が組み合わさることで、家族・肌色つきの手・国旗・キーキャップなど、見た目は1文字でも中身は複数コードポイントになります。
解説
この道具は、絵文字や文字列が内部でどんなコードポイントの並びでできているかを、1文字(書記素)ごとに分解して見せます。「書記素」とは人が見て1文字と感じるまとまりのことで、Unicodeの1コードポイントとは必ずしも一致しません。たとえば「😀」は1コードポイント(U+1F600)ですが、「👍🏽」や「👨👩👧」は複数のコードポイントが組み合わさって見た目1文字になっています。本ツールは書記素の分割に Intl.Segmenter を使い、未対応の環境ではコードポイント単位の分割へ自動でフォールバックします。
各コードポイントについて、コードポイント番号(U+XXXX)と10進、UTF-16でのコード単位、UTF-8でのバイト列を表示します。UTF-16では U+FFFF を超える文字が「サロゲートペア」という上位・下位2つの16bitで表されます。たとえば「😀」(U+1F600)は UTF-16 では D83D DE00 の2つ、UTF-8 では F0 9F 98 80 の4バイトになります。JavaScriptの文字列は内部がUTF-16なので、絵文字1つで length が2になる理由もこの仕組みで説明できます。
絵文字の合成にはいくつかの部品があります。ZWJ(U+200D・ゼロ幅接合子)は複数の絵文字をつないで家族などの合成絵文字を作る不可視の文字、肌色修飾子(U+1F3FB〜U+1F3FF)は直前の人物絵文字の肌の色を6段階で変える文字、異体字セレクタ VS16(U+FE0F)は直前の文字をカラー絵文字として表示させる指示です。国旗は地域指標記号(U+1F1E6〜U+1F1FF)を2つ並べて表し、「🇯🇵」は J(U+1F1EF)と P(U+1F1F5)の組み合わせです。本ツールはこれらを注記付きで見分けて表示します。
実装で使うときのために、JavaScriptにそのまま貼れる \u{...} 形式の文字列リテラルや、HTMLに書ける実体参照(10進 😀 ・16進 😀)も出力し、ワンタップでコピーできます。処理はすべてブラウザ内で完結し、入力した内容はサーバーへ送信されません。オフラインでも動作します。文字化けやDBの絵文字保存(utf8mb4)、入力バリデーションのデバッグ、絵文字が何個のコードポイントでできているかの確認などに役立ちます。
よくある質問
書記素とコードポイントは何が違いますか?
書記素は人が見て『1文字』と感じるまとまりで、コードポイントはUnicodeが割り当てた番号1つを指します。たとえば『👨👩👧』は書記素としては1文字ですが、内部では男性・ZWJ・女性・ZWJ・女の子という5つのコードポイントでできています。本ツールは書記素ごとにまとめつつ、内訳のコードポイントも並べて表示します。
サロゲートペアとは何ですか?
UTF-16でU+FFFFを超える文字を表すために使う、上位(High)と下位(Low)2つの16bitの組み合わせです。たとえば『😀』(U+1F600)はUTF-16ではD83DとDE00の2つになります。JavaScriptの文字列は内部がUTF-16のため、絵文字1つで length が2になることがあります。
同じ絵文字なのにUTF-8とUTF-16でバイト数が違うのはなぜ?
UTF-8とUTF-16は符号化方式が異なるためです。『😀』はUTF-8では4バイト(F0 9F 98 80)、UTF-16では2コード単位=4バイト(D83D DE00)です。多くの絵文字はUTF-8で4バイト、UTF-16でサロゲートペア(2コード単位)になります。
ZWJシーケンスとは何ですか?
ZWJ(U+200D・ゼロ幅接合子)という不可視の文字で複数の絵文字をつなぎ、1つの合成絵文字にしたものです。家族絵文字や職業絵文字などがこれにあたります。対応していない環境では、つながずに個々の絵文字が並んで表示されることがあります。
肌色(👍🏽など)はどう表されていますか?
元の人物・手の絵文字(例: 👍=U+1F44D)の直後に、肌色修飾子(U+1F3FB〜U+1F3FF、Fitzpatrick 6段階)を1つ付けて表します。『👍🏽』はU+1F44DとU+1F3FD(TYPE-4)の2コードポイントです。
国旗の絵文字(🇯🇵)はどういう仕組みですか?
地域指標記号(Regional Indicator、U+1F1E6〜U+1F1FF)というA〜Zに対応する専用の文字を2つ並べて、ISOの国コードを表します。『🇯🇵』はJ(U+1F1EF)とP(U+1F1F5)の組み合わせです。対応フォントが無い環境では、2文字のアルファベット風の記号として見えることがあります。
❤️の『️』(VS16)は何ですか?
異体字セレクタ VS16(U+FE0F)です。直前の文字をカラー絵文字として表示させる指示で、それ自体は目に見えません。付いていないと白黒のテキスト字形(❤)で表示されることがあります。本ツールでは書記素の注記でVS16の有無を示します。
名称が表示されない文字があるのはなぜですか?
本ツールは全Unicode文字の正式名称データベースを内蔵していないため、構造に関わる文字(ZWJ・異体字セレクタ・肌色修飾子・地域指標記号など)と一部の代表的な絵文字のみ名称を表示し、その他はブロック名(例: 顔文字、補助記号と絵記号)で代替します。U+コードポイントは常に正確に表示されます。
入力した内容はサーバーに送られますか?
送られません。分解・変換はすべてブラウザ内で完結し、入力内容はどこにも送信されません。オフラインでも利用できます。