メインコンテンツへスキップ
X の投稿には、最大 280文字 まで入力できます。ただし、すべての文字が同じように数えられるわけではありません。絵文字、URL、一部の Unicode 文字には、特別なカウントルールが適用されます。

文字数の重み付け

X では、重み付き文字カウント方式を使用しています。ほとんどの文字は 1 としてカウントされますが、一部の文字は 2 としてカウントされます。
文字種別重み最大文字数
ラテン文字、句読点、一般的な記号1280
絵文字2絵文字 140 個
CJK(中国語、日本語、韓国語)2140 文字
その他の Unicode 文字2(デフォルト)可変
App で文字数を正確にカウントするには、オープンソースの twitter-text ライブラリを使用してください。

絵文字のカウント方法

すべての絵文字は、複雑さに関係なく 2文字 として数えられます:
Emoji表示文字数Unicode
👾単一の絵文字2U+1F47E
🙋🏽肌の色付きの絵文字2🙋 + 🏽 修飾子
👨‍🎤ZWJ で結合された絵文字2👨 + ZWJ + 🎤
👨‍👩‍👧‍👦家族のシーケンス2絵文字 4個 + ZWJ 3個
ゼロ幅ジョインナー (ZWJ) は絵文字を視覚的に結合しますが、文字数には加算されません。

URL の扱い

すべての URL は t.co の短縮 URL に変換され、元の長さに関係なく23文字としてカウントされます。
https://example.com                    → 23 characters
https://example.com/very/long/path     → 23 characters
これは、ポスト本文内で検出された有効なURLすべてに適用されます。

特殊なケース

コンテンツカウントルール
返信内の @メンション返信の先頭に自動で補完される @メンションはカウントされません
新しい @メンション手動で追加した @メンションは通常どおりカウントされます
メディア(公式クライアント経由で)添付されたメディアは文字数 0 としてカウントされます
ハッシュタグ# とタグのテキストを含めて通常どおりカウントされます

テキストエンコード

X API では UTF-8 エンコードが必須です。文字数は Unicode 正規化形式 C (NFC) を用いて算出されます。 café の例:
形式バイト数文字数
NFC(合成済み)c a f é4
NFD(分解済み)c a f e ́5
X は NFC に正規化するため、どちらの場合も 4 文字として扱われます。

実装

正確な文字数カウントのために、公式の twitter-text ライブラリを使用してください。
import { parseTweet } from 'twitter-text';

const result = parseTweet('Hello, world! 👋');
console.log(result.weightedLength); // 16
console.log(result.valid);          // true
このライブラリは、絵文字シーケンス、URL 検出、Unicode 正規化など、あらゆるエッジケースを処理します。

リソース

twitter-text ライブラリ

テキスト解析用の公式オープンソースライブラリです。

設定ファイル

文字の重み付け定義と Unicode 範囲です。