てもとツール

2026-05-04

絵文字や日本語で文字数が合わない原因と対処法

「140字のはずなのに弾かれた」「フォームで文字数オーバー」を解決。絵文字や日本語を含むテキストの正しい数え方と、ブラウザだけで使える無料ツールを紹介します。

この記事の要点

  • 絵文字は「機械が数える数」と「人が見る数」が違うことが多い
  • 日本語は半角の英数字より「重い」(データ量はだいたい3倍)
  • SNSの字数制限・フォーム入力・原稿用紙換算は数え方がそれぞれ異なる
  • 文字数カウンターは4種類の数え方を並べて表示する

文字数が合わない一番の原因は、絵文字と日本語の「数え方」がアプリごとに違うからです。

SNS の下書きで「140 字のはずなのに弾かれた」という経験はないでしょうか。レポートで「規定字数に足りない」、Web フォームで「上限を超えました」という状況も同じ原因です。数え方を 1 つに揃えれば、すぐに解決できます。

文字数カウンターを使って、絵文字や日本語を含むテキストを正確に数えるコツを紹介します。

「文字数が合わない!」あるある 3 つ

文字数のすれ違いは、たいてい次の 3 つのどれかです。

  • SNS で 140 字以内のはずなのに弾かれた。絵文字や記号が混ざると、サービスが多めに数えていることが多いです。
  • Web フォームで「上限を超えました」と出た。フォームの裏側ではバイト数で上限が決まっていて、ひらがなや漢字が混ざると早く上限に達します。
  • 学校のレポートで規定字数に合わない。改行・空白・記号を含めるかどうかで、同じ文章でも 50 字くらい変わります。

どれも「数え方」を選び直すだけで解決します。

なぜ「文字数」の答えが場所によって違うのか

文章を数える方法には大きく分けて 4 種類あります。シーンに合わせて選ぶのがコツです。

  • そのまま数える(システム視点): 一番素朴な数え方。絵文字を 2〜10 個分として数えてしまうことがあります
  • 絵文字を 1 個と数える: SNS の上限や、見た目の文字数を知りたいときに使います
  • 改行や空白を取り除いて数える: レポートや原稿用紙の枚数計算で標準的な方法です
  • データ量で数える(バイト数): フォーム入力やメール件名の上限を確かめたいときに使います

下の表は、同じ文字でも数え方によって結果がどれだけ違うかを示したものです。

文字システムが数える数見た目の文字数バイト数(データ量)
a(半角英数)111
(ひらがな)113
🎉(絵文字)214
👨‍👩‍👧‍👦(家族絵文字)11125

家族の絵文字は「お父さん・お母さん・娘・息子」を見えない記号でつなげています。システムからは「11 個分」に見えてしまうため、SNS で字数を弾かれる原因のひとつになります。

てもとツール 文字数カウンターの 4 つの基本指標

文字数カウンターは、4 種類の数え方をテキスト入力した瞬間にすべて表示します。

文字数カウンターの初期画面。テキストエリアと4つの空のカードが並ぶ

入力欄に文字を打つかペーストすると、上段の 4 つのカードが同時に更新されます。

  • 総文字数: 全部の文字を数えた数
  • 改行・空白を除く: レポートで標準的に使う実文字数
  • バイト数(UTF-8): フォームや DB に保存するときのデータ量
  • 行数: 改行で区切ったブロックの数

日本語と絵文字を含むテキストを入力した状態。4つの集計値が更新されている

「SNS の下書きを 280 字で確認したい」というときは、改行・空白を除いた数を見るのが一番実用的です。

さらに詳しく数えたいとき

「詳細集計を表示」を押すと、絵文字を 1 個と数えるモードや原稿用紙換算が出てきます。

詳細集計を展開した状態。絵文字を1個と数えるカードと、原稿用紙換算のカードが追加表示される

絵文字を 1 個と数えるモード(書記素クラスタ)

「人が見て 1 文字」と感じる単位で数えます。X や Threads の字数制限はだいたいこの方式に揃ってきています。絵文字や顔文字を多用する文章で「上限を超えた」と言われたら、まずこのカードの数を見るのが正解です。

原稿用紙換算

400 字詰めと 200 字詰めの両方に対応しています。切り上げ枚数小数 1 桁の概算を両方表示しているのがポイントです。

切り上げだけだと「420 字 → 2 枚分」と体感より大きく見えます。「1.0 枚相当」という小数表記を併記すると、現状を把握しやすくなります。

使用例

たとえば、Threads で絵文字を多用するブロガーが 🎉👨‍👩‍👧‍👦 を含む下書きを投稿しようとした場面です。

はじめのカウンターでは 145 字、ペーストし直すと 141 字、てもとツールで数え直すと 132 字でした。投稿フォームの上限が「絵文字を 1 個と数えるモードで 500 字」なら 132 で余裕です。「機械的に数えた数で 140 字」なら 145 でアウトになります。

こんな場面で使える

SNS の下書きチェック

X (旧 Twitter)・Threads・Bluesky など、SNS の字数制限を超えていないかを投稿前に確認できます。絵文字を多用する方ほど効果的です。

学校のレポート・小論文

「800 字以上 1200 字以内」のような提出規定に合わせられます。改行・空白を除いた実文字数と原稿用紙換算の両方を見ながら書けます。バーが進む感覚があるので、締切前のラストスパートでも残量を把握しやすくなります。

メール件名・自己紹介文

メールの件名は約 30 文字を超えるとスマホで途切れがちです。マッチングサービスや SNS プロフィールの自己紹介文も、上限ぴったりに収めたいときに役立ちます。

Web フォーム入力前の確認

問い合わせフォームや申し込みフォームで「文字数オーバー」のエラーが出る前に、バイト数を見ておけば未然に防げます。

安心して使えるポイント

入力したテキストは、すべてあなたのブラウザの中だけで処理しています。サーバーには送信していません。

結果サマリをコピーしたあとに「コピーしました」と表示される

仕事で扱う未公開の原稿や社内メモを貼り付けても、プライバシー上の心配なく使えます。「結果サマリをコピー」を押すとすべての指標をテキストとしてクリップボードに送れます。Slack や issue にそのまま貼って共有することもできます。

関連ツール

まとめ

文字数のすれ違いは、ほぼ「数え方の選び間違い」で説明できます。SNS なら絵文字を 1 個と数えるモード、フォームならバイト数、レポートなら実文字数と原稿用紙。シーンに合わせて見るカードを選んでください。

迷ったらまず文字数カウンターを開いて、4 種類の指標を並べて見るのが近道です。

補足: 開発者の方へ

JavaScript で書く場合、"🎉".length2 を返します。String.length は UTF-16 コードユニット数を返すためです。

サロゲートペアや ZWJ 結合が含まれると、見た目より大きな値になります。「人間が見て 1 文字」が必要なら Intl.Segmenter を使うのが標準的です。

const seg = new Intl.Segmenter('ja', { granularity: 'grapheme' });
[...seg.segment('👨‍👩‍👧‍👦🎉あ')].length; // => 3

UTF-8 バイト数は new TextEncoder().encode(text).length で取得できます。日本語が中心なら 1 文字 3 バイトなので、約 N × 0.33 文字が目安です。絵文字を含む場合は N × 0.25 文字を目安にすると安全です。

これで本番でカラムを溢れさせる事故を防げます。Intl.Segmenter は Node.js v16+ およびモダンブラウザで利用可能です。