メインコンテンツへスキップ
このページでは、Tweetの作成時およびX API全体において、文字がどのように扱われるかを説明します。実装の詳細については、Xが提供するオープンソースのtwitter-textライブラリを参照してください。ライブラリはGitHubで入手できます。

背景

X は SMS ベースのテキストサービスとして始まりました。これにより、当初の Tweet の長さは 140 文字に制限されていました(SMS の上限が 160 文字で、そのうち 20 文字をコマンドやユーザー名に割り当てていたためです)。その後、X の進化に伴い、最大の Tweet 文字数は 280 文字に拡張されました。依然として短く簡潔でありながら、より豊かな表現が可能になりました。

文字の定義

多くの場合、Tweet のテキスト内容は最大 280 文字、または Unicode のグリフまで含められます。一部のグリフは複数文字としてカウントされます。 あるグリフが 1 文字か複数文字としてカウントされるかを「重み」と呼びます。どの文字が 1 より大きい重みを持つかの正確な定義は、twitter-text の Tweet 解析ライブラリ設定ファイルに記載されています。 現在の設定ファイルのバージョンでは、既定の「2 文字分の重み」と、異なる重み付けが適用される 4 つのUnicode コードポイント範囲が定義されています。現時点では、これらの範囲のコードポイントはいずれも 1 文字としてカウントされます。
  • 最初の範囲は、Latin-1 コードページ全体の文字を対象とします(U+0000〜U+10FF)。
  • 2 番目の範囲は、Zero Width Joiner(絵文字やその他のグリフの結合に使用)を含む一般的な句読点です(U+2000〜U+200D)。
  • 3 番目の範囲は、Unicode の双方向制御記号である U+200E および U+200F を除く一般的な句読点です(U+2010〜U+201F)。
  • 最後の範囲は、引用記号を対象とします(U+2032〜U+2037)。
twitter-text ライブラリで計算された Tweet テキストとその長さの例は、ライブラリのテスト設定ファイル validate.yml に掲載されています。
表示される文字長さ説明Unicode シーケンス
a1ラテン小文字 aU+0061
á1アキュート付きラテン小文字 aU+00E1
ӑ1ブリーブ付きキリル小文字 aU+04D1
1サーカムフレックスとアキュート付きラテン小文字 oU+1ED2

絵文字

twemoji がサポートする絵文字は、結合修飾子の有無にかかわらず、常に2文字として数えます。これは、Fitzpatrick 肌の色調性別修飾子 で変更された絵文字も含み、Unicode のコードポイント数が大幅に多い場合でも同様です。絵文字のカウントは、twitter-text 内の正規表現で定義されており、標準的な絵文字に Unicode のゼロ幅接合子 (U+200D) が1つ以上組み合わさった並びを検出します。
表示される絵文字長さ説明Unicode シーケンス
👾2既知の絵文字の既定の長さ
🙋🏽2肌の色調修飾子付きの絵文字🙋 U+1F64B, 🏽 U+1F3FD
👨‍🎤2結合用グリフ(ゼロ幅接合子)を用いる絵文字シーケンス👨 U+1F468, U+200D, 🎤 U+1F3A4
👨‍👩‍👧‍👦2複数の結合用グリフ(ゼロ幅接合子)を用いる絵文字シーケンス👨 U+1F468, U+200D, 👩 U+1F469, U+200D, 👧 U+1F467, U+200D, 👦 U+1F466

中国語 / 日本語 / 韓国語の文字

CJK(中国語 / 日本語 / 韓国語)で使用される文字は2文字分としてカウントされます。したがって、CJKのテキストのみで構成されたTweetでは、これらの文字は最大140文字までしか使用できません。

エンティティオブジェクト

Tweet には エンティティオブジェクト を含めることがあり、その一部は Tweet の文字数に影響します。 URL: すべての URL は t.co リンクに変換されます。これは、URL の長さが twitter-text の設定ファイルtransformedURLLength パラメータで定義されることを意味します。Tweet 内の URL の現在の長さは 23 文字で、通常の URL がそれより短い場合でも同様です。 返信: 返信の Tweet の冒頭に自動入力される @name は文字数制限に含まれません。@メンションで始まる新規の返信ではない Tweet はカウント対象であり、ユーザーが Tweet 本文に明示的に追加した @メンションもカウントされます。 メディア: 公式クライアントから投稿された場合、pic.x.com の URL として表される、Tweet に添付されたメディアは文字数 0 として扱われます。 エンティティオブジェクトの詳細については、開発者向けドキュメントをご覧ください。

X の文字エンコーディング

X API の endpoint は UTF-8 でエンコードされたテキストのみを受け付けます。その他のエンコーディングは、テキストを API に送信する前に UTF-8 に変換する必要があります。 X は、Tweet の長さをテキストの正規化形式C(NFC)に基づいてカウントします。 例として、単語「café」。見た目も読み方も同じですが、使用するバイト数が異なる2つのバイト列があります。
café0x63 0x61 0x66 0xC3 0xA9「é」文字、いわゆる「合成済み文字」を使用。
café0x63 0x61 0x66 0x65 0xCC 0x81結合分音記号を用いて「e」に重ねる方式。
正規化形式Cは、長い形式(0x65 0xCC 0x81)よりも、完全に結合された文字(café の例における 0xC3 0xA9)の使用を優先します。 X は UTF-8 のバイト数ではなく、テキスト内のコードポイント数をカウントします。café の例の 0xC3 0xA9 は 1 つのコードポイント(U+00E9)で、UTF-8 では 2 バイトとしてエンコードされますが、0x65 0xCC 0x81 は 2 つのコードポイントで 3 バイトとしてエンコードされます。
I