Normaliser tirets et traits d’union
Les textes copiés depuis des sites, PDF, documents bureautiques et systèmes éditoriaux contiennent souvent plusieurs caractères qui ressemblent à des tirets, mais réagissent différemment lors d’une recherche, d’une validation, d’un tri ou dans du code.
Lancer gratuitement
Ce normaliseur convertit les traits d’union Unicode, tirets demi-cadratins et cadratins, signes moins et variantes associées en un style cohérent. Choisissez un trait d’union, un tiret demi-cadratin ou cadratin, puis obtenez le texte nettoyé et le nombre exact de caractères modifiés.
Pourquoi des tirets similaires créent de vrais problèmes
Le trait d’union-signe moins, le tiret demi-cadratin, le tiret cadratin, le signe moins mathématique et le trait d’union insécable peuvent sembler presque identiques, surtout dans une police proportionnelle. Les ordinateurs ne les considèrent pourtant pas comme interchangeables. Un code produit copié depuis un PDF peut échouer lors d’une recherche exacte dans une base, car il contient un trait d’union insécable. Une valeur négative collée depuis un logiciel de composition peut ne pas être reconnue comme nombre parce que son signe est mathématique plutôt que le caractère ASCII attendu par l’importateur. Les index de recherche, expressions régulières, détections de doublons, noms de fichiers et outils en ligne de commande peuvent également réagir différemment à ces points de code. Le problème est plus difficile à repérer lorsque le caractère est invisible, comme un trait d’union conditionnel inséré pour la césure. La normalisation supprime cette ambiguïté en remplaçant les caractères reconnus par un caractère choisi. Les lettres, nombres, espaces, signes et sauts de ligne restent inchangés : l’opération demeure ciblée et prévisible, sans devenir une réécriture typographique générale.
Choisissez le style adapté à votre destination
Utilisez le trait d’union pour les identifiants, données importées, échanges en texte brut, clés de recherche, noms de fichiers, code source et systèmes qui attendent de l’ASCII. C’est le choix le plus sûr lorsque la compatibilité prime sur la typographie. Choisissez le demi-cadratin pour un texte éditorial dont la charte l’emploie dans les plages numériques ou les relations, par exemple les pages et les itinéraires. Choisissez le cadratin lorsqu’un flux de publication exige des incises uniformes. Le caractère sélectionné remplace chaque tiret reconnu du texte, y compris les traits d’union ASCII existants si la cible est un demi-cadratin ou un cadratin. Ce comportement uniforme est volontaire : l’outil normalise des caractères, mais ne détermine pas si une marque représente un mot composé, une soustraction, une plage ou une incise. Une telle interprétation dépendrait de la langue et pourrait modifier silencieusement le sens. Si votre document exige plusieurs styles selon leur rôle grammatical, normalisez uniquement les sélections concernées ou appliquez des règles éditoriales contextuelles après ce nettoyage mécanique.
Intégrez une sortie déterministe à vos contrôles
La réponse contient le texte normalisé, le style sélectionné, le caractère cible littéral et le nombre de caractères réellement modifiés. Un tiret déjà identique à la cible est conservé et n’augmente pas le compteur. Le résultat convient ainsi aux contrôles qualité automatisés : un processus peut refuser une typographie inattendue, consigner l’ampleur des modifications ou vérifier qu’un second passage indique zéro changement. L’algorithme est déterministe et n’effectue aucun appel réseau, aucune détection de langue, aucune opération d’intelligence artificielle ni transformation aléatoire. Il parcourt une entrée de taille limitée et remplace uniquement une famille documentée de caractères Unicode apparentés aux tirets. Les espaces sont volontairement préservés : un cadratin entouré d’espaces les garde lorsqu’il devient un trait d’union, tandis qu’un tiret non espacé le reste. La normalisation des caractères n’est donc pas mêlée à une convention subjective d’espacement. Pour des imports reproductibles, exécutez cette opération avant la segmentation, la correspondance exacte, l’analyse numérique, la création de slugs ou la déduplication, puis appliquez séparément vos règles métier de ponctuation et d’espacement.
Cas d’usage
Nettoyer des identifiants importés
Convertissez les traits d’union insécables cachés et les tirets typographiques avant de comparer codes produit, références de compte ou identifiants de document.
Préparer un texte brut fiable
Uniformisez la ponctuation copiée depuis des PDF et documents bureautiques avant une recherche, une validation ou un traitement de données.
Appliquer une charte éditoriale
Convertissez des tirets mélangés en un seul style demi-cadratin ou cadratin avant une relecture ciblée.
Questions fréquentes
Quel est le tarif ?
L’exécution est gratuite dans votre navigateur sur cette page, ou facturée $0.002 par requête API.
Quels styles de sortie sont proposés ?
Vous pouvez convertir les caractères reconnus en trait d’union-signe moins ASCII, tiret demi-cadratin ou tiret cadratin.
Les espaces autour des tirets sont-ils modifiés ?
Non. Les espaces et sauts de ligne existants sont conservés exactement ; seuls les caractères reconnus sont remplacés.
L’outil distingue-t-il ponctuation, plage et soustraction ?
Non. Il normalise mécaniquement les caractères sans déduire leur sens grammatical ou mathématique.
Que signifie le nombre de remplacements ?
Il compte les caractères reconnus dont le point de code d’origine différait du caractère cible choisi.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/str/normalize-dashes \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Pages 10–15 — revised − 2 notes"}'const res = await fetch("https://api.kit.forhosting.com/str/normalize-dashes", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Pages 10–15 — revised − 2 notes"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/normalize-dashes",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Pages 10–15 — revised − 2 notes"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/normalize-dashes", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Pages 10–15 — revised − 2 notes"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Pages 10–15 — revised − 2 notes"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/normalize-dashes", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"text": "Pages 10–15 — revised − 2 notes"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.normalize_dashes",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_chars | 200000 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |