Skip to main content
Best Emojis

絵文字Unicode変換ツール

絵文字、または絵文字を含む文章をまるごと貼り付けると、開発者に必要なあらゆる形式が得られます。Unicodeコードポイント、HTMLエンティティ、CSSとJavaScriptのエスケープ、Python、そして生のUTF-8バイトです。逆方向の変換もできます。処理はすべてブラウザ内で行われ、長さカウンターを見れば、1つの絵文字がある言語では7文字、別の言語では28バイトと数えられる理由がわかります。

見た目の文字数
3
コードポイント(Pythonのlen)
6
UTF-16単位(JSの.length)
10
UTF-8バイト
22
UnicodeコードポイントU+1F44D U+1F3FD U+2764 U+FE0F U+1F1EF U+1F1F5
HTMLエンティティ(16進数)👍🏽❤️🇯🇵
HTMLエンティティ(10進数)👍🏽❤️🇯🇵
CSSのcontent\1F44D \1F3FD \2764 \FE0F \1F1EF \1F1F5
JavaScript(ES6)\u{1F44D}\u{1F3FD}\u2764\uFE0F\u{1F1EF}\u{1F1F5}
UTF-16(Java、C#、JSON)\uD83D\uDC4D\uD83C\uDFFD\u2764\uFE0F\uD83C\uDDEF\uD83C\uDDF5
Python\U0001F44D\U0001F3FD\u2764\uFE0F\U0001F1EF\U0001F1F5
UTF-8バイトF0 9F 91 8D F0 9F 8F BD E2 9D A4 EF B8 8F F0 9F 87 AF F0 9F 87 B5
URLエンコード%F0%9F%91%8D%F0%9F%8F%BD%E2%9D%A4%EF%B8%8F%F0%9F%87%AF%F0%9F%87%B5

8つの絵文字、4種類の長さ

下の各行は、画面上では1つの絵文字です。ほかの列は、さまざまな言語やデータベースが数える値で、上のツールと同じ変換処理で算出しています。

絵文字コードポイント見た目PythonJavaScriptUTF-8バイト
😀単一のコードポイントU+1F6001124
❤️テキスト記号+スタイル選択子U+2764 U+FE0F1226
👍🏽絵文字+肌の色U+1F44D U+1F3FD1248
🇯🇵2つの地域指示子の文字U+1F1EF U+1F1F51248
👩‍💻ゼロ幅接合子で結合U+1F469 U+200D U+1F4BB13511
1️⃣数字、選択子、キーキャップU+0031 U+FE0F U+20E31337
🏴󠁧󠁢󠁳󠁣󠁴󠁿タグシーケンスU+1F3F4 U+E0067 U+E0062 U+E0073 U+E0063 U+E0074 U+E007F171428
🫺Emoji 18.0(2026年)U+1FAFA1124

1つの絵文字が7文字にもなる理由

コードポイントはUnicodeが割り当てる番号で、絵文字は複数のコードポイントで構成されることがあります。最もわかりやすい例はスコットランドの旗です。黒い旗、gbsctを表す5つの見えないタグ文字、そしてキャンセルタグの、合計7つのコードポイントでできています。JavaScriptはテキストをUTF-16で保存し、U+FFFFを超える文字は2単位を使うため、同じ旗の.lengthは14になります。UTF-8はそれぞれのコードポイントに4バイトを使うので、データベースでは28バイトを占めます。人の目に見える数と一致するのはそのうち1つだけで、しかもそれは、ほとんどのコードが求めない値です。JavaScriptではgranularityをgraphemeに設定したIntl.Segmenterで数え、Pythonではサードパーティのregexモジュールの\Xパターンが同じ役割を果たします。

MySQLで絵文字を「?」にせず保存する方法

保存後に絵文字が????になってしまう場合、その列はほぼ確実にMySQLのutf8文字セットを使っています。utf8は名前に反して、1文字あたり最大3バイトしか保存できません。U+FFFFを超える絵文字はすべて4バイト必要なので、挿入が失敗するか、データが失われます。解決策はutf8mb4です。ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ciでテーブルを変換し、接続自体もutf8mb4を使うようにしてください。テーブルが正しくても、接続がutf8のままだとテキストは壊れてしまいます。MySQL 8.0でutf8mb4がデフォルトになったため、この問題が起きるのは主に、新規作成ではなくアップグレードされた古いデータベースです。

HTMLエンティティ、CSS、そして末尾のスペース

UTF-8で配信されるページ(ほぼすべてのページがそうです)では、絵文字をHTMLに直接貼り付けられます。👍のようなエンティティが必要なのは、テンプレートやメールシステムが生の文字を壊してしまう場合だけです。CSSはもっと厄介です。contentプロパティでは、\1F44Dのようなエスケープは16進数でない最初の文字まで続くため、次の文字が16進数として読まれる可能性があるなら、スペースでエスケープを終わらせる必要があります。このスペースは吸収され、表示されません。当サイトのCSSの行ではコードポイントの間に必ずこのスペースを入れているため、肌の色付きの親指を立てた手は\1F44D \1F3FDのように、意図的な空白を含んだ形で出力されます。

Xがすべての絵文字を2文字と数える理由

文字数制限も、数え方が分かれるところです。Xのオープンソースの文字数カウントライブラリは、構成に関係なく、ほとんどの絵文字を280文字の上限に対して2文字として扱います。そのため👍と👩‍💻は、一方が単一のコードポイントで他方が3つでできていても、同じ文字数になります。SMSはさらに厳しく、絵文字が1つ入るだけでメッセージ全体がUCS-2エンコードになり、1通の上限が160文字から70文字に減ります。フォームやデータベースの列、SNSが短く見えるテキストを受け付けない場合、たいていは上の長さの表で理由がわかります。

絵文字用語集:コードポイント、結合子、選択子Slack、Discord、GitHub用の絵文字ショートコードコピーできるすべての絵文字

絵文字のコードポイントに関する質問

スマイリー絵文字のUnicodeは何ですか?

😀 grinning face(にっこり笑顔)はU+1F600です。HTMLでは😀、CSSでは\1F600、JavaScriptでは\u{1F600}または古い形式の\uD83D\uDE00、Pythonでは\U0001F600と書きます。ほかの絵文字のコードは、変換ツールに貼り付けると確認できます。

1つの絵文字に2つのコードポイントがあるのはなぜですか?

多くの絵文字はシーケンスだからです。❤️はハート記号U+2764にスタイル選択子U+FE0Fを加えたもの、👍🏽は親指を立てた手に肌の色を加えたもので、旗は2つの文字でできています。端末はそのシーケンスを1つの絵として描きます。

\u{1F600}と\uD83D\uDE00の違いは何ですか?

どちらも同じ絵文字です。\u{1F600}はコードポイントを直接指定する形式で、最近のJavaScriptで使えます。\uD83D\uDE00はUTF-16のサロゲートペアで、古いJavaScript、Java、C#、JSONでは、U+FFFFを超える文字を表すのにこの形式しか使えません。

絵文字は何バイトですか?

UTF-8では、U+FFFFを超えるコードポイント1つにつき4バイトなので、😀のような単純な絵文字は4バイトです。シーケンスでは合計され、👍🏽は8バイト、👩‍💻は11バイト、スコットランドの旗は28バイトです。

この変換ツールは、入力したテキストをどこかに送信しますか?

いいえ。変換はすべてブラウザ内でJavaScriptにより行われます。入力や貼り付けをした内容が、アップロードされたり保存されたりすることはありません。