文字数カウンター
文字数カウントは、各サービスと同じ基準でテキストを測定します。ほとんどのプラットフォームは書記素、Xは重み付き文字数(CJKの漢字は2、URLは一律23としてカウント)、SMSはGSM-7とUCS-2のセグメント計算です。text.lengthで数えると、絵文字はすべて過大に数えられます。
- 文字数
- 156
- コードポイント
- 156
- UTF-16単位
- 157
- 単語
- 26
- 文
- 4
- 行数
- 5
- バイト
- 161
プラットフォーム別の上限
X (Twitter)
- 投稿146 / 280重み付け文字数
- 投稿(プレミアム)146 / 25000重み付け文字数
- 自己紹介156 / 160文字数
- 表示名156 / 50文字数106個超過
Bluesky
- 投稿156 / 300文字数
- 自己紹介156 / 256文字数
Threads
- 投稿156 / 500文字数
- キャプション156 / 2200文字数
- 自己紹介156 / 150文字数6個超過
- 投稿156 / 3000文字数
- 見出し156 / 220文字数
- 投稿156 / 63206文字数
TikTok
- キャプション156 / 2200文字数
YouTube
- タイトル156 / 100文字数56個超過
- 説明156 / 5000文字数
- タグ156 / 500文字数
検索 & SEO
- メタタイトル156 / 60文字数96個超過
- メタディスクリプション156 / 155文字数1個超過
Google広告
- 見出し156 / 30文字数126個超過
- 説明156 / 90文字数66個超過
Discord
- メッセージ156 / 2000文字数
- ステータステキスト156 / 700文字数
SMS
- 1つのメッセージ156 / 160コードポイント
Xの重み付け文字数
146 / 280 · 1個のリンクを23としてカウント
CJK文字と絵文字は2、ラテン文字は1として数えます。文字数ではなく、Xの計算方法です。
SMS
3 メッセージ · UCS-2 · 157/70
1文字でもUCS-2文字が含まれると、容量が半分の70文字になります。
文字数カウンターはどう動きますか?
すべての文字数カウンターは、正確には尋ねられていない質問に答えています。そして誰が尋ねるかによって、答えは変わります。このツールは単一の数値を出すことを拒みます。そのような数値は存在しないからです。
同じテキストを数える3つの方法
"😀".lengthは2です。JavaScriptはUTF-16コード単位を数えます。これはエンコーディングについての事実であって、テキストについてのものではありません。絵文字は2単位必要です。[..."😀"].lengthは1です。コードポイントのほうが、人が文字と呼ぶものに近いからです。そしてグラフェム数も1です。プラットフォームの上限が実際に使っているのはこの数です。
この3つは、絵文字1つが示唆する以上に離れていきます。ゼロ幅接合子で結ばれた4人の人物からなる家族絵文字は、コード単位では11、グラフェムでは1です。国旗はコードポイント2、グラフェム1。結合アクセント付きの文字は入力の仕方によって、コードポイントが1にも2にもなります。見た目は同じテキストなのに、数え方が2つあるのです。3つの数字はすべて表示します。フォームのmaxlengthが使うのは1つ目、データベースのカラムの長さがよく使うのは2つ目、プラットフォームの上限が使うのは3つ目だからです。
Xはそもそも文字を数えていない
Xは重みを数えます。CJKの漢字は2、ラテン文字は1、絵文字は2。だから140文字の日本語と280文字のラテン文字が同じ幅に収まります。さらにXはすべてのURLをt.co経由で書き換え、実際の長さに関係なく一律23文字として数えます。200文字のリンクを含む投稿は、見た目より23文字短く数えられ、200文字に見える日本語の投稿はXの計算では400になり、上限を大きく超えます。ここで使う重みの範囲と23文字ルールは、X自身が公開している設定であり、推定ではありません。
SMSには2つのアルファベットと2つの計算方式がある
テキストメッセージは、すべての文字がGSM 7ビットアルファベットに含まれていれば160文字、1つでも含まれていなければ70文字です。カーブしたアポストロフィ、アクセント付き大文字、絵文字が該当します。文字1つで、1通のメッセージが3通に変わることもあります。連結すると数字はまた変わります。各セグメントにヘッダーが入るため、153と67です。さらに、アルファベット内の8文字({}[]|^~\とユーロ記号)は2文字として送信されるため、160文字中160と表示されるメッセージでも、2通として課金されることがあります。
テキスト
Ship faster without shipping secrets. 🚀
カウント結果
characters (graphemes) 39 code points 39 UTF-16 code units 40 words 5 X weighted 40 / 280 SMS 1 message (UCS-2)
テキスト → カウント結果
テキスト
Ship faster without shipping secrets. 🚀 https://example.com/releases/v9-32
カウント結果
characters (graphemes) 75 code points 75 UTF-16 code units 76 words 10 X weighted 65 / 280 SMS 2 messages (UCS-2)
文字数カウンターが対応するオプションとエッジケースは?
| パラメータ | 型 | デフォルト | 動作とエッジケース |
|---|---|---|---|
| グラフェム | カウント | プラットフォームの上限 | 利用者の目に見える文字。プラットフォームの上限が数えている単位です。絵文字も、国旗も、4人家族も、それぞれ1です。Intl.Segmenterで計算し、対応していないブラウザではコードポイントにフォールバックします。 |
| Xの重み付け文字数 | カウント | 280 | X独自の計算です。CJKの漢字とほとんどの絵文字は2、ラテン文字は1、URLはt.coを経由するため一律23文字として数えられます。ここで使う重みの範囲は、Xが公開しているtwitter-textの設定に基づきます。 |
| コードポイント | カウント | — | ほかの多くのカウンターが「文字数」と呼ぶもの、そして文字数で測るデータベースのカラムが保持しているもの。結合文字やゼロ幅接合子が絡むと、グラフェム数とは異なります。 |
| UTF-16コード単位 | カウント | String.length | JavaScriptの.lengthやHTMLのmaxlength属性が数えているもの。絵文字は2です。.lengthで検証するフォームと、グラフェムで数えるプラットフォームが食い違う理由を知っておくと役立ちます。 |
| 単語数 | カウント | — | 文字・数字・アポストロフィの連続。don'tは1語、well-knownも1語です。空白で分割して数えると、スペースが2つ連続しただけで2語になります。 |
| SMSのエンコーディング | 派生 | GSM-7またはUCS-2 | GSM-7では160文字、UCS-2では70文字。GSMアルファベット外の文字が1つあるだけで、メッセージ全体が切り替わります。連結セグメントは各セグメントにヘッダーが入るため、153文字と67文字になります。 |
| バイト | カウント | UTF-8 | テキストが通信路上とデータベースで消費する大きさです。絵文字は4バイト、CJKの漢字は3バイト、ASCIIの英字は1バイト。280文字の日本語投稿は800バイトを大きく超えます。 |
| 検証日 | 日付 | 2026-10-03 | プラットフォームの上限は予告なく変わります。これらは表示の日付時点で確認したものです。各項目の横の注記は、超えたときに切り捨てられるのか送信を拒否されるのかを示しており、実際に重要なのはこちらです。 |
よくある質問
絵文字が2文字として数えられるのはなぜですか?
何かがUTF-16コード単位を数えているからです。JavaScriptのString.lengthもHTMLのmaxlength属性もその方式です。基本多言語面の外にある絵文字は、符号化に2つのコード単位を必要とします。読み手と各プラットフォームの上限が使うのはグラフェム数で、そちらは1です。両方がここに表示されるので、フォームがどちらの数で文句を言っているのか判別できます。
短く見えるのにXの投稿が上限を超えるのはなぜですか?
Xは文字数ではなく重みを数えます。CJKの漢字は2として数えるので、200文字の日本語投稿はXの計算では400になり、280を大きく超えます。絵文字も2です。ラテン文字は1対1なので、英語で試している限り問題は見えません。重み付きの数を別に表示しているのはまさにそのためです。
リンクは本当に23文字として数えられるのですか?
Xでは、はい。すべてのURLはt.co経由で書き換えられ、実際の長さに関係なく一律23文字として数えられます。200文字のトラッキングURLも短いURLと同じコストです。だからこそ、ここのカウントは単純に文字列を測るだけではありません。300文字の投稿に長いリンクが1つあっても、問題なく投稿できます。
1文字追加しただけでSMSのカウントが変わるのはなぜですか?
GSM 7ビットアルファベット外の文字が1つあるだけで、メッセージ全体がUCS-2として再符号化され、容量が160から70に半減するからです。カーブしたアポストロフィ、アクセント付き大文字、絵文字が該当します。ツールは切り替えの原因となった文字を正確に名指しします。メッセージを分割するより、その1文字を置き換えるほうが通常は簡単です。
グラフェムとは、平たく言うと何ですか?
人が指さして「1文字」と呼ぶものです。国旗、肌の色トーン修飾子付きの絵文字、2つのコードポイントで入力されるアクセント付きの文字は、いずれも1つのグラフェムです。Intl.Segmenterはこれを正しく計算します。対応していないブラウザではコードポイントにフォールバックし、ほぼ正しいものの、結合アクセントを別の1文字として数えてしまいます。
テキストはどこかにアップロードされますか?
いいえ。カウントはこのタブ内の文字列に対する単純な計算で、入力中もネットワークパネルにリクエストは表示されません。これがここで重要なのは、投稿前に文字数を測るテキストが、未公開のお知らせやプライベートなメッセージであることが多いからです。