> ## Documentation Index
> Fetch the complete documentation index at: https://generaltranslation.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Comptage des caractères

> Comment X compte les caractères des Publications

Les Publications sur X peuvent contenir jusqu'à **280 caractères**. Cependant, tous les caractères ne sont pas comptés de la même manière : les émojis, les URL et certaines plages Unicode ont des règles de comptage spécifiques.

***

<div id="character-weights">
  ## Poids des caractères
</div>

X utilise un système de comptage pondéré des caractères. La plupart des caractères comptent pour 1, mais certains comptent pour 2 :

| Type de caractère                     | Poids          | Nombre maximal de caractères |
| :------------------------------------ | :------------- | :--------------------------- |
| Latin, ponctuation, symboles courants | 1              | 280                          |
| Emojis                                | 2              | 140 emojis                   |
| CJK (chinois, japonais, coréen)       | 2              | 140 caractères               |
| Autres caractères Unicode             | 2 (par défaut) | Varie                        |

<Tip>
  Utilisez la bibliothèque open source [twitter-text](https://github.com/twitter/twitter-text) pour compter précisément les caractères dans votre application.
</Tip>

***

<div id="emoji-counting">
  ## Comptage des émojis
</div>

Tous les émojis comptent pour **2 caractères**, quel que soit leur niveau de complexité :

| Emoji       | Affichage                            | Nombre de caractères | Unicode              |
| :---------- | :----------------------------------- | :------------------- | :------------------- |
| 👾          | Émoji unique                         | 2                    | U+1F47E              |
| 🙋🏽        | Avec modificateur de couleur de peau | 2                    | 🙋 + 🏽 modificateur |
| 👨‍🎤       | Combiné avec ZWJ                     | 2                    | 👨 + ZWJ + 🎤        |
| 👨‍👩‍👧‍👦 | Séquence familiale                   | 2                    | 4 émojis + 3 ZWJ     |

Les caractères de jointure de largeur nulle (ZWJ) combinent les émojis visuellement mais n’augmentent pas le nombre de caractères.

***

<div id="url-handling">
  ## Gestion des URL
</div>

Toutes les URL sont raccourcies via le service `t.co` et comptent pour **23 caractères**, quelle que soit leur longueur d’origine :

```
https://example.com                    → 23 caractères
https://example.com/very/long/path     → 23 caractères
```

<Note>
  Ceci s’applique à toute URL valide détectée dans le texte de la publication.
</Note>

***

<div id="special-cases">
  ## Cas particuliers
</div>

| Contenu                         | Règle de comptage                                                                       |
| :------------------------------ | :-------------------------------------------------------------------------------------- |
| **@mentions dans les réponses** | Les @mentions ajoutées automatiquement au début des réponses ne sont pas comptabilisées |
| **Nouvelles @mentions**         | Les @mentions que vous ajoutez manuellement sont comptabilisées normalement             |
| **Médias**                      | Les médias joints (via les clients officiels) comptent pour 0 caractère                 |
| **Hashtags**                    | Sont comptés normalement (# + texte du hashtag)                                         |

***

<div id="text-encoding">
  ## Encodage du texte
</div>

L’API X requiert un encodage **UTF-8**. La longueur des caractères est calculée en utilisant la forme de normalisation Unicode C (NFC).

Exemple avec `café` :

| Forme           | Octets      | Caractères |
| :-------------- | :---------- | :--------- |
| NFC (composé)   | `c a f é`   | 4          |
| NFD (décomposé) | `c a f e ́` | 5          |

L’API X applique une normalisation NFC, de sorte que les deux s’encodent sur 4 caractères.

***

<div id="implementation">
  ## Implémentation
</div>

Utilisez la bibliothèque officielle [twitter-text](https://github.com/twitter/twitter-text) pour compter précisément les caractères :

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    import { parseTweet } from 'twitter-text';

    const result = parseTweet('Hello, world! 👋');
    console.log(result.weightedLength); // 16
    console.log(result.valid);          // true
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    from twitter_text import parse_tweet

    result = parse_tweet('Hello, world! 👋')
    print(result.weightedLength)  # 16
    print(result.valid)           # True
    ```
  </Tab>
</Tabs>

La bibliothèque gère tous les cas particuliers, y compris les séquences d’émojis, la détection d’URL et la normalisation Unicode.

***

<div id="resources">
  ## Ressources
</div>

<CardGroup cols={2}>
  <Card title="Bibliothèque twitter-text" icon="github" href="https://github.com/twitter/twitter-text">
    Bibliothèque open source officielle pour l’analyse de texte.
  </Card>

  <Card title="Fichier de configuration" icon="file-code" href="https://github.com/twitter/twitter-text/tree/master/config">
    Définitions des poids des caractères et des plages Unicode.
  </Card>
</CardGroup>
