Ce qu'est vraiment un texte, et pourquoi les outils ne sont pas d'accord
Un fichier texte, ce sont des octets plus un encodage, et l'encodage n'est pas enregistré dans le fichier. Seule une convention indique à un programme qu'un octet donné signifie « é » — c'est pourquoi le même fichier s'ouvre correctement à un endroit et affiche « é » à un autre. L'UTF-8 est la réponse moderne : il stocke les lettres latines courantes sur un octet, les lettres accentuées sur deux, et la plupart du chinois, du japonais, de l'arabe et tous les emojis sur trois ou quatre. L'UTF-16 est ce qu'utilisent Windows et JavaScript en interne : il stocke presque tout sur deux octets et le reste sur quatre. Windows-1252 et Latin-1 sont les encodages sur un octet que produisent encore les anciens systèmes, et la source habituelle du mojibake, ces caractères illisibles. Bon à savoir sur ces pages : la Visionneuse CSV détecte l'encodage du fichier que vous déposez, y compris UTF-16 et Windows-1252, et vous permet de le modifier. Les zones de texte simples, non — un fichier déposé y est lu en UTF-8, donc un export Latin-1 affichera mal ses lettres accentuées, et la solution est de le convertir d'abord.
« Caractère » a quatre sens, et celui qu'il vous faut dépend de qui impose la limite. Ce qu'une personne voit comme un caractère est un graphème. Ce qu'une expression régulière reconnaît est un point de code. Ce que renvoie string.length en JavaScript, ce sont des unités UTF-16. Ce que mesure une colonne de base de données ou un en-tête HTTP, ce sont des octets UTF-8. Pour du texte anglais simple, les quatre concordent, c'est pourquoi personne ne s'en aperçoit — puis un emoji famille compte pour un graphème, sept points de code, onze unités UTF-16 et vingt-cinq octets, et un message de 200 caractères est refusé par un champ de 255 caractères. Le Compteur de caractères affiche les quatre précisément pour cette raison.
Les caractères invisibles sont de vrais caractères. Une espace insécable ressemble trait pour trait à une espace et c'est pourtant un tout autre caractère — elle arrive sans cesse dans un texte copié depuis une page web ou un traitement de texte, et elle casse les recherches, l'analyse des CSV et le code qui découpe sur les espaces. Les liants sans chasse sont ce qui assemble un emoji représentant plusieurs personnes. Traits d'union conditionnels, marques de direction et indicateurs d'ordre des octets voyagent tous avec le texte collé. Aucun n'apparaît à l'écran, donc le seul signal dont vous disposez est un comptage qui ne correspond pas à ce que vous voyez — c'est d'ailleurs une utilité bien réelle d'un compteur de caractères. À noter : l'option « Ignorer tous les espacements » de Comparer des textes fusionne les espaces ordinaires et les tabulations ; elle ne traite pas une espace insécable comme une espace, car ce n'est pas la même chose.
Les fins de ligne expliquent pourquoi un diff montre parfois toutes les lignes comme modifiées. Windows termine une ligne par un retour chariot suivi d'un saut de ligne ; tous les autres systèmes utilisent le seul saut de ligne. Enregistrez un fichier LF depuis un éditeur Windows et chacune de ses lignes diffère désormais d'un octet invisible : une comparaison octet par octet — git diff, diff(1) — signale le fichier entier comme réécrit et masque la seule modification que vous avez réellement faite. Comparer des textes et Supprimer les lignes en double découpent selon les trois conventions avant de comparer, donc un fichier dont seules les fins de ligne ont changé n'apparaît pas ici comme un mur de rouge. C'est pratique dans un outil de lecture et piégeux dans un dépôt : corrigez le problème à la source, dans votre éditeur ou avec les réglages de fin de ligne de git.
Deux chaînes d'apparence identique peuvent être différentes à la comparaison, et la normalisation en est généralement la cause. Unicode peut écrire « é » de deux façons : sous forme d'un seul point de code, ou d'un « e » simple suivi d'un accent aigu combinant. Les deux s'affichent pareil mais ce sont des suites d'octets différentes, donc une comparaison, un dédoublonnage ou une recherche en base de données les traite comme deux valeurs distinctes. macOS et Windows ont longtemps été en désaccord sur la forme à utiliser pour les noms de fichiers : voilà comment une liste rassemblée depuis deux machines se retrouve avec ce qui ressemble à des doublons exacts qui refusent d'être dédoublonnés. Le Compteur de caractères permet de le repérer — les deux formes ont le même nombre de graphèmes et un nombre de points de code différent. Aucun de ces outils ne convertit d'une forme à l'autre ; c'est l'affaire d'une ligne dans un script avec une bibliothèque Unicode, comme unicodedata.normalize en Python.
Le « nombre de mots » est une interprétation, pas une mesure. Découper sur les espaces est une règle de l'anglais, et l'appliquer au chinois, au japonais ou au thaï — qui ne mettent pas d'espaces entre les mots — fait d'un long article un seul mot. Notre compteur utilise plutôt la segmentation Unicode en mots du navigateur, qui sait où commencent les mots dans toutes les écritures. Les désaccords restants portent sur les traits d'union (« bien-être » compte pour un mot ici et dans Word, pour deux dans certains outils), les nombres isolés et ce qui constitue une phrase — « Nous avons vu le Dr. Martin » est une seule phrase, et un découpage naïf en voit deux. Le temps de lecture est une estimation supplémentaire : 238 mots par minute en lecture silencieuse, chiffre tiré d'une méta-analyse plutôt que du chiffre rond recopié d'un article de blog à l'autre.
Quand un navigateur n'est vraiment pas le bon outil
Rien dans ce module n'est jamais envoyé ni conservé, et c'est ce qui permet d'y coller sans risque un brouillon inédit ou du code source propriétaire. C'est aussi ce qui fixe la limite, et nous préférons vous dire où elle se trouve plutôt que de vous la laisser découvrir en plein travail.
Les gros fichiers. Tout le texte est gardé dans la mémoire de l'onglet et réanalysé à chaque frappe. Quelques mégaoctets passent sans peine ; un fichier journal de plusieurs centaines de mégaoctets, non, et un téléphone abandonne plus tôt qu'un ordinateur portable. La ligne de commande n'a pas ce problème, car elle traite en flux : grep et ripgrep cherchent dans des fichiers plus gros que votre mémoire, sed et awk les transforment ligne par ligne, et sort avec l'option unique dédoublonne une liste de dizaines de millions de lignes en s'appuyant sur le disque. Tous sont gratuits et déjà installés sur macOS et Linux.
Les documents très différents. Comparer des textes s'arrête à 8 000 différences, car au-delà le coût mémoire de l'algorithme augmente assez vite pour figer l'onglet, et un diff aussi grand est de toute façon illisible. Deux versions du même document n'y arrivent presque jamais ; deux documents sans rapport l'atteignent immédiatement. Pour relire du code, diff et git diff gèrent n'importe quelle taille, et un véritable outil de fusion à trois voies fait quelque chose que cette page ne sait pas faire du tout.
Changer d'encodage ou normaliser l'Unicode. Ces pages lisent et rendent compte ; elles ne convertissent pas d'un encodage à l'autre. iconv convertit entre tous les encodages existants, la commande file devine celui que vous avez, et la normalisation Unicode tient en une ligne de Python ou un appel à uconv d'ICU. Si vous réparez un export plein de mojibake, voilà la chaîne d'outils qu'il vous faut.
Tout ce qui se répète. Ces outils s'exécutent quand quelqu'un clique. Compter les mots de quatre cents documents, ou minifier un dossier à chaque commit, relève d'un script ou d'une étape de build — et pour la minification en particulier, votre outil de build fait la même minification, avec les source maps, le mode watch et le cache qu'une zone de collage ne peut pas offrir. Cette page sert au fichier que vous avez sous les yeux.
Le CSS moderne. Minifier CSS refuse l'imbrication native et la syntaxe moderne des plages de media queries au lieu de les minifier, car le minificateur sur lequel il repose est antérieur aux deux et supprime sans prévenir ce qu'il ne comprend pas. C'est un refus honnête plutôt qu'une fonctionnalité, et la solution est de compiler d'abord l'imbrication avec Sass, PostCSS ou Lightning CSS — ce que votre outil de build fait très certainement déjà.
Choisir entre des outils aux noms proches
Compteur de mots ou Compteur de caractères ? Le même comptage, avec des chiffres différents mis en avant. Le Compteur de mots affiche d'abord les mots, les phrases, les paragraphes et le temps de lecture, soit ce qui mesure une dissertation, un article ou un discours. Le Compteur de caractères affiche d'abord les caractères, les caractères sans espaces et les octets UTF-8, soit ce qui mesure une meta description, un segment de SMS ou un champ de base de données. Si votre texte a été refusé parce que trop long, c'est le compteur de caractères qu'il vous faut, et plus précisément son nombre d'octets.
Comparer des textes ou Supprimer les lignes en double ? La comparaison répond à « qu'est-ce qui a changé entre ces deux versions » et a besoin de deux textes. L'outil de suppression des doublons travaille sur une seule liste et répond à « qu'est-ce qui apparaît plus d'une fois ici » ; il peut aussi vous dire quelles entrées se répétaient et combien de fois, trier de façon naturelle pour que item2 passe avant item10, ou ne garder que les lignes apparues une seule fois. Trouver les entrées propres à l'une de deux listes, c'est le travail de l'outil de suppression des doublons, pas du comparateur.
Minifier HTML, Minifier CSS ou Minifier JavaScript ? Trois langages, trois minificateurs, et un recoupement à connaître : le minificateur HTML minifie aussi le CSS des blocs style et le JavaScript des blocs script, de la même manière que les deux autres pages. Un fichier HTML unique n'a donc besoin que d'un outil, pas de trois. Les fichiers .css et .js séparés ont besoin de leur propre page.
Visionneuse XML, Formateur XML ou Validateur XML ? La visionneuse vous donne ici une arborescence repliable à explorer, ce qu'il vous faut quand le document est volumineux et que vous y cherchez quelque chose. Le formateur et le validateur, dans les outils développeur, vous donnent un texte indenté à recoller dans un fichier et la ligne et la colonne exactes d'une erreur. Lire, d'un côté ; modifier et corriger, de l'autre.
Visionneuse CSV ou ouvrir le fichier dans Excel ? Ce n'est pas un outil concurrent, mais c'est bien la comparaison que les gens font. Excel convertit à l'ouverture sans rien demander : un code produit 00123 devient 123, une référence 5-3 devient le 5 mars, un long numéro de commande passe en notation scientifique, et un export séparé par des points-virgules venu d'un système allemand atterrit tout entier dans la colonne A. La visionneuse affiche chaque valeur sous forme de texte, exactement telle qu'elle est enregistrée, pour que vous voyiez ce qu'on vous a réellement envoyé.
Aperçu Markdown ou Markdown en PDF ? L'aperçu sert à vérifier qu'un README s'affiche comme GitHub l'affichera, en direct pendant la frappe. Markdown en PDF, dans les outils document, sert à produire un document fini avec des sauts de page. Vérifiez ici, publiez là-bas.