X の投稿には、最大 280文字 まで入力できます。ただし、すべての文字が同じように数えられるわけではありません。絵文字、URL、一部の Unicode 文字には、特別なカウントルールが適用されます。
X では、重み付き文字カウント方式を使用しています。ほとんどの文字は 1 としてカウントされますが、一部の文字は 2 としてカウントされます。
| 文字種別 | 重み | 最大文字数 |
|---|
| ラテン文字、句読点、一般的な記号 | 1 | 280 |
| 絵文字 | 2 | 絵文字 140 個 |
| CJK(中国語、日本語、韓国語) | 2 | 140 文字 |
| その他の Unicode 文字 | 2(デフォルト) | 可変 |
すべての絵文字は、複雑さに関係なく 2文字 として数えられます:
| Emoji | 表示 | 文字数 | Unicode |
|---|
| 👾 | 単一の絵文字 | 2 | U+1F47E |
| 🙋🏽 | 肌の色付きの絵文字 | 2 | 🙋 + 🏽 修飾子 |
| 👨🎤 | ZWJ で結合された絵文字 | 2 | 👨 + ZWJ + 🎤 |
| 👨👩👧👦 | 家族のシーケンス | 2 | 絵文字 4個 + ZWJ 3個 |
ゼロ幅ジョインナー (ZWJ) は絵文字を視覚的に結合しますが、文字数には加算されません。
すべての 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
from twitter_text import parse_tweet
result = parse_tweet('Hello, world! 👋')
print(result.weightedLength) # 16
print(result.valid) # True
このライブラリは、絵文字シーケンス、URL 検出、Unicode 正規化など、あらゆるエッジケースを処理します。
twitter-text ライブラリ
テキスト解析用の公式オープンソースライブラリです。
設定ファイル
文字の重み付け定義と Unicode 範囲です。