Comparer deux textes — Diff
Comparez deux textes instantanément dans votre navigateur. Vue côte à côte, surlignage mot à mot, export en diff unifié, options pour ignorer casse/espaces/lignes vides. 100 % navigateur — aucun upload.
Options à ignorer
Qu'est-ce qu'un diff de texte ?
Le diff de texte est une comparaison structurée de deux documents textuels qui trouve le plus petit ensemble d'insertions et de suppressions transformant l'un en l'autre. La sortie rend le changement visible : vert pour les lignes ajoutées, rouge pour les lignes supprimées, en côte à côte ou en patch unifié (le format `---/+++/@@` utilisé par `git`, GitHub et la commande Unix `patch`).
Sous le capot, tout diff moderne repose sur un algorithme de plus longue sous-séquence commune (LCS). L'article d'Eugene Myers de 1986 en O((N+M)D) est l'implémentation canonique efficace ; la programmation dynamique classique (utilisée ici, avec rognage du préfixe/suffixe commun) est plus simple et fonctionne parfaitement pour les entrées web typiques. Une fois les lignes alignées, les paires suppression + ajout voisines passent par un second LCS au niveau des jetons pour que le rendu ne surligne que les mots ayant réellement changé à l'intérieur d'une ligne — ce que les relecteurs appellent diff intra-ligne ou au mot près.
Pourquoi ne pas simplement comparer les chaînes caractère par caractère ? Parce que les éditions sont rarement à plat : insérer une ligne au milieu d'un fichier de 200 lignes décale toutes les lignes en dessous. Un `===` naïf déclarerait les 199 lignes différentes. LCS dit la vérité : une ligne ajoutée, 199 inchangées.
Cet outil exécute toute la comparaison dans votre navigateur. Aucun upload, aucun fichier temporaire, aucun log. Sûr pour le code propriétaire, les contrats annotés, les logs privés, tout ce que vous seriez mal à l'aise de coller dans un serveur tiers. Besoin de comparer du JSON à la place ? Utilisez le JSON Diff structurel pour que l'ordre des clés et les espaces cessent d'être du bruit. Comparer deux configs en YAML ou CSV ? Convertissez d'abord avec YAML vers JSON ou JSON vers CSV, puis comparez avec le bon outil pour le format.
// Two strings that look 'mostly the same' but a naïve check disagrees const a = 'hello world'; const b = 'hello, world!'; // Character equality a === b; // false — but only 3 characters actually changed. // LCS-style diff (this tool, at line + word granularity) // → 1 line modified, inline highlight: 'hello[, ]world[!]' // → unified patch: // --- original // +++ modified // @@ -1 +1 @@ // -hello world // +hello, world!
Fonctionnalités clés
Côte à côte + Unifié
Basculez entre la vue visuelle à deux colonnes (pour la relecture humaine) et le format patch unifié canonique (pour `git apply`, les outils de revue de code, les rapports de bug).
Surlignage au mot près
Quand deux lignes sont appariées comme modifiées, seuls les jetons changés portent un fond coloré. Votre œil trouve l'édition instantanément au lieu de scanner 80 caractères.
Ignorer casse / espaces / lignes vides
Quatre bascules indépendantes : casse, tous les espaces, espaces finaux uniquement, lignes vides. Reproduit `git diff -i -w -b` en deux clics.
Export en diff unifié
Copiez un patch `---/+++/@@` propre avec trois lignes de contexte. Se colle directement dans un commentaire de PR, un rapport de bug ou `patch -p1`.
100 % navigateur
Les entrées ne quittent jamais votre appareil. Aucun upload, aucune analytique sur le texte. Fonctionne hors ligne une fois la page chargée. Sûr pour le code propriétaire et la prose confidentielle.
Unicode + RTL
Découpe les jetons sur les frontières de mot Unicode. Arabe, hébreu, CJK se comparent proprement ; les variantes de fin de ligne (CRLF, LF, CR) sont toutes normalisées.
Exemples
Revue de code — un renommage de variable
function getUser(id) {
const u = db.users.find(x => x.id === id);
return u;
} function getUser(userId) {
const u = db.users.find(x => x.id === userId);
return u;
} La vue côte à côte met en évidence chaque ligne contenant le renommage, tandis que le diff au mot près estompe les jetons inchangés pour que le relecteur voie exactement quel identifiant a changé.
Modification de contrat — une clause ajoutée
1. The service is provided as-is. 2. Either party may terminate with 30 days notice. 3. Disputes are resolved in California courts.
1. The service is provided as-is. 2. Either party may terminate with 30 days notice. 2a. Termination notice must be in writing. 3. Disputes are resolved in California courts.
Une seule clause insérée (ligne 2a) est la seule différence. Les lignes de contexte autour restent propres — pratique pour relire un contrat ou un document de politique en mode « track changes ».
Analyse de logs — temps de requête modifié
GET /api/users 200 14ms POST /api/orders 201 88ms GET /api/orders/42 200 21ms
GET /api/users 200 14ms POST /api/orders 201 4200ms GET /api/orders/42 500 21ms
Deux lignes changent. Le surlignage inline montre la dérive de latence 88ms → 4200ms et le code de statut 200 → 500. Une chronologie d'incident toute trouvée.
Espaces en fin de ligne — option « Ignorer les espaces finaux »
margin: 0; padding: 0; border: none;
margin: 0; padding: 0; border: none;
Sans l'option, la ligne 1 signale une différence (espaces finaux). Activez « Ignorer les espaces / tabulations finaux » et le diff tombe à zéro — la même astuce que `git diff -b`.
Comment utiliser
- 1
Collez les deux versions
Texte original à gauche, texte modifié à droite. Le diff en direct s'affiche pendant que vous tapez ; les entrées volumineuses (>200 Ko combinées) basculent sur un bouton Diff manuel.
- 2
Activez les options à ignorer dont vous avez besoin
Ignorer la casse, ignorer tous les espaces, ignorer les espaces finaux ou ignorer les lignes vides — chaque option est indépendante et persistante entre les visites.
- 3
Lisez le diff ou récupérez le patch
Côte à côte pour la relecture humaine, Unifié pour le format patch `---/+++/@@`. « Copier le diff unifié » envoie un patch propre dans votre presse-papier pour une revue de code ou un `patch -p1`.
Pièges courants du diff
Tout le fichier « changé » après une copie Windows ↔ Unix
Si vous collez depuis Notepad sous Windows dans un original édité sous Unix, chaque ligne montrera des différences \r. Activez « Ignorer les espaces / tabulations finaux » pour faire taire les caractères CR.
Diff: 200 modifications (all because of trailing \r)
Ignore trailing spaces / tabs → 2 real changes
Diff d'indentation qui hurle
Reformater tabulations ↔ espaces explose les diffs ligne par ligne. « Ignorer tous les espaces » ramène le diff aux vrais changements sémantiques.
Diff: 87 modifications (all are indent changes)
Ignore all whitespace → 4 actual changes
Paragraphes identiques signalés à cause d'une ligne vide
Ajouter ou retirer une seule ligne vide dans de la prose peut désaligner toute une région. « Ignorer les lignes vides » règle ça sans toucher au contenu.
Diff: paragraph 2 'completely changed' (one blank line moved)
Ignore blank lines → no changes in paragraph 2
Le diff dit « identique » mais les fichiers diffèrent
Presque toujours une option « Ignorer » de casse ou d'espace laissée activée d'une session précédente. Ouvrez le panneau « Options à ignorer » — toutes les bascules y sont visibles. Désactivez-les toutes pour une comparaison byte-strict.
0 differences shown, but `cmp` says the files differ
Disable all Ignore options → real diff appears
Du JSON collé qui semble « tout changé »
Le diff de texte traite l'ordre des clés comme significatif ; pas JSON. Pour des payloads JSON, utilisez l'outil dédié JSON Diff — il ignore l'ordre des clés et respecte la stricteté des types.
Text diff on JSON: 100% of lines changed (just a key reorder)
<a href="/fr/tools/json-diff">JSON Diff</a>: 0 differences
Avertissement de diff tronqué ignoré
Au-delà de 5 000 lignes par côté, l'entrée est tronquée. Si l'avertissement s'affiche, passez en ligne de commande `diff -u file1 file2` ou `git diff --no-index` — les deux streament et gèrent des gigaoctets.
Pasted a 20,000-line log — only first 5,000 lines diffed
`diff -u a.log b.log` in terminal handles full file
Cas d'usage courants
- Extrait de revue de code
- Déposez deux versions d'une fonction dans les panneaux pour repérer d'un coup d'œil un renommage, une branche supprimée ou une nouvelle clause de garde. Le surlignage au mot près est plus rapide que de scanner le diff GitHub pour un changement d'une ligne.
- Annotation de contrat / politique
- Collez le contrat d'hier face à la révision d'aujourd'hui. Les clauses insérées ressortent ; les paragraphes inchangés se replient en gris. Exportez le patch unifié pour la trace de revue juridique.
- Investigation de chronologie de logs
- Comparez la tranche de logs pré-incident d'un SRE à la tranche pendant l'incident. Latence, code de statut et dérive de fréquence ressortent immédiatement sans `awk`.
- Révision de prose / brouillon
- Collez un brouillon et la version de votre éditeur. Le diff au mot près montre exactement quelles phrases ont été réécrites — précieux pour accepter ou rejeter les changements un par un.
- Revue de traduction
- Comparez une ancienne traduction à une re-traduction pour vérifier que la nouvelle copie préserve sens, structure et placeholders. Activez « Ignorer les espaces finaux » pour faire taire le bruit que les traducteurs introduisent souvent.
- Audit de fichier .env / config
- Comparez deux fichiers `.env`, `docker-compose.yaml` ou rc shell. Avec « Ignorer les lignes vides » activé, le diff se concentre sur les différences fonctionnelles plutôt que sur le bruit de formatage.
Détails techniques
- LCS avec rognage préfixe/suffixe
- Les lignes communes en début et fin sont retirées avant d'exécuter le LCS par programmation dynamique. Un diff « deux configs de 2 000 lignes avec une seule ligne changée » se réduit à une table DP de 1×1 et s'affiche en moins d'une milliseconde.
- Diff intra-ligne au niveau des jetons
- Les hunks voisins suppression + ajout sont appariés et tokenisés via des runs Unicode mot/non-mot/espace. Une seconde passe LCS produit les segments verts/rouges qui rendent les lignes modifiées lisibles.
- Diff unifié = compatible git/patch
- La sortie suit le format `---/+++/@@ -L,C +L,C @@` défini pour GNU patch et utilisé par Git, GitHub et tous les outils de revue de code. Appliquez avec `pbpaste | patch -p0`.
- Plafond d'entrée à 5 000 lignes par côté
- Au-delà du plafond, le diff tronque et avertit. Pour des entrées de plusieurs Mo, utilisez `diff -u` en ligne de commande ou `git diff --no-index` — ils streament et gèrent des gigaoctets.
Bonnes pratiques
- Choisissez les options à ignorer avant de lire
- Le bruit lié aux espaces finaux, CRLF et casse noie le signal. Activez les bonnes options en premier ; le diff devient beaucoup plus lisible et vous arrêtez de vous entraîner à survoler les « faux » changements.
- Unifié pour partager, Côte à côte pour relire
- Les colonnes visuelles sont pour vos yeux. Les patchs unifiés sont pour les terminaux des autres. Un diff unifié copié s'insère dans un message Slack, un commentaire Jira ou `patch -p1` sans traduction.
- Vérifiez avec le % de similarité
- Si deux fichiers sont « presque identiques » mais que le score de similarité est de 30 %, vous avez un problème de fins de ligne ou d'espaces. Activez « Ignorer tous les espaces » et revérifiez avant de lire le diff.
Questions fréquentes
Le texte que je colle est-il envoyé à votre serveur ?
Quelle différence entre diff de texte et diff JSON ?
Comment ignorer les espaces, la casse ou les lignes vides ?
Qu'est-ce qu'un diff unifié (et quand le copier) ?
Pourquoi le diff montre-t-il des lignes entières modifiées alors que je n'ai changé qu'un mot ?
Comment sont gérées les fins de ligne CRLF vs LF ?
Quelle taille les deux entrées peuvent-elles atteindre ?
Et pour comparer du code ? L'outil connaît-il mon langage ?
Pourquoi une seule modification apparaît parfois comme une ligne supprimée plus une ligne ajoutée ?
Comment le pourcentage de similarité est-il calculé ?
Puis-je partager un diff avec un collègue ?
Le diff gère-t-il les langues de droite à gauche comme l'arabe ou l'hébreu ?
Outils connexes
Voir tous les outils →Testeur Regex gratuit — Déboguez vos motifs en ligne
Traitement de texte
Testez vos expressions régulières en ligne, gratuit. Correspondances en direct, groupes de capture, aperçu de remplacement, découpe et explication du motif. Regex JavaScript, 100 % confidentialité — sans inscription.
Compteur de mots et de caractères gratuit
Traitement de texte
Comptez instantanément mots, caractères, phrases, paragraphes et temps de lecture. Compteur en direct avec vérifications de limites Twitter, méta description et Instagram. Gratuit, privé, sans inscription.
Convertisseur de Base — Binaire, Hex, Décimal & Octal
Outils de conversion
Convertissez entre binaire, hexadécimal, décimal, octal et toute base (2-36) instantanément. Gratuit, privé, 100 % dans votre navigateur.
Décodeur et Encodeur Base64
Encodage et formatage
Décodez et encodez en Base64 en ligne gratuitement. Conversion en temps réel, support UTF-8 et émojis. 100 % privé, dans votre navigateur.
Générateur crontab et constructeur d'expressions cron
Date et heure
Construisez et décodez des expressions cron dans le navigateur. Aperçu en direct de la prochaine exécution en heure locale ou UTC. POSIX 5 champs, préréglages, description claire. Gratuit et privé.
Convertisseur CSV vers JSON
Encodage et formatage
Convertissez du CSV en JSON dans le navigateur. RFC 4180, inférence de types, ligne d'en-tête, sûr pour grands entiers. 100 % privé, sans envoi.