Outils de développement · Comparaison de texte
Différences invisibles : espaces insécables, guillemets intelligents et formulaires Unicode
· Comment ça marche
texte-diff unicode débogage
Explique pourquoi les lignes qui se ressemblent à l'écran peuvent différer octet par octet, depuis les espaces insécables et les guillemets bouclés jusqu'aux caractères de largeur nulle et aux accents décomposés, et comment les trouver.
Deux lignes qui semblent identiques mais qui sont marquées comme modifiées : s'ouvrent avec un fichier de traduction qui échoue à la révision sans raison visible
Une ligne de traduction peut s'afficher exactement comme sa voisine et échouer quand même à la comparaison. Les polices du navigateur masquent les limites des points de code, combinent des accents et attribuent des formes similaires à différentes ponctuations. ToolAcre compare les chaînes JavaScript uniquement après les transformations de casse ou d'espaces sélectionnées, de sorte qu'une ligne marquée peut exposer une véritable distinction textuelle.
Faites confiance à l'emplacement, pas à une hypothèse sur le personnage. Copiez la ligne suspecte dans un éditeur qui révèle les points de code ou dans un inspecteur hexadécimal. Le diff vous indique quelle ligne diffère ; il n'annote pas la position interne ni ne nomme la valeur Unicode responsable.
Espaces insécables et leurs proches — explique U+00A0 et les autres caractères d'espacement insérés par les traitements de texte et pourquoi un espace simple ne leur correspond pas
U+00A0 l'espace insécable n'est pas le même caractère que l'espace ordinaire U+0020. En mode ordinaire leurs touches de ligne restent distinctes. Sous Ignorer les espaces, le remplacement des espaces peut réduire ces exécutions à un espace ordinaire après le découpage, faisant disparaître certaines de ces différences.
Cette option est une transformation correspondante, pas une commande de nettoyage Unicode. Les lignes égales affichées conservent le texte original de gauche et aucun document corrigé n'est produit. Si un système de publication nécessite un espacement insécable, une correspondance normalisée pourrait masquer une instruction de mise en page intentionnelle plutôt que de la corriger.
Le mode Espaces peut réduire les espaces Unicode ; la comparaison ordinaire préserve les caractères distincts
Les apostrophes droites et les guillemets diffèrent des formes typographiques d'ouverture et de fermeture. Ignorer la casse ne modifie pas la ponctuation et la gestion des espaces ne réécrit pas les guillemets. La correction automatique d’un traitement de texte peut donc produire un remplacement complet même lorsque la phrase se lit de manière identique en un coup d’œil.
Choisissez la ponctuation souhaitée en fonction de la destination. Le code source, les clés de recherche et les formats de données peuvent nécessiter des caractères ASCII exacts, tandis que la copie éditoriale peut préférer les formes typographiques. La comparaison prouve la différence, mais elle n’a aucune politique permettant de décider quel côté a raison.
Caractères directionnels et de largeur nulle : couvre les espaces de largeur nulle, les menuisiers et les marques bidirectionnelles qui s'affichent comme si rien ne modifiait encore la ligne.
Les espaces de largeur nulle, les menuisiers et les marques directionnelles peuvent occuper des positions de chaîne sans dessiner de glyphe visible. ToolAcre restitue les entrées à l'aide du contenu texte, évitant ainsi l'interprétation HTML, mais ce rendu sécurisé ne rend pas visibles les points de code cachés. Ils participent toujours à l’égalité en ligne ordinaire.
Le comportement directionnel peut également faire de l'ordre visuel un guide peu fiable pour l'ordre de stockage. Ne copiez pas un fragment suspect à direction mixte dans une commande shell ou un identifiant simplement parce qu'il vous semble familier. Inspectez les points de code et le contexte environnant dans un outil spécialement conçu avant de remplacer quoi que ce soit.
Accents composés et décomposés : explique la normalisation NFC par rapport à NFD avec une lettre accentuée comme un point de code par rapport à une lettre de base plus une marque de combinaison
Un caractère accentué peut être représenté comme un point de code précomposé ou comme une lettre de base suivie d'une marque de combinaison. Le référentiel ne contient aucun appel à `normalize`, donc les formulaires d'apparence canoniquement équivalents restent des chaînes JavaScript différentes et peuvent produire des lignes de suppression et d'ajout.
La suite de tests prouve que les chaînes Unicode correspondent et `café` diffère de `cafe` ; cela ne promet pas de comparaison prenant en compte les graphèmes. Cet article évite donc les affirmations concernant la comparaison d'octets ou l'équivalence complète d'Unicode. L'algorithme de ligne reçoit des chaînes et compare leurs clés transformées avec une stricte égalité.
Les accents composés et décomposés restent différents car l'outil n'effectue aucune normalisation Unicode
Supposons qu'une ligne de ressource apparaisse inchangée mais soit marquée. Comparez d'abord avec toutes les options désactivées, puis désactivez les espaces seuls. Si la ligne devient égale, inspectez les espaces et les espaces masqués. S'il reste modifié, inspectez les guillemets, en combinant les marques et autres points de code plutôt que de retaper la ligne à plusieurs reprises.
Un inspecteur de caractères peut révéler U+00A0 là où un espace ordinaire était attendu. Remplacez-le uniquement après avoir confirmé les exigences du format. Dans le contenu traduit, les espaces insécables peuvent être des conventions de ponctuation délibérées, et une vaste recherche et remplacement peut endommager la typographie correcte ailleurs.
Ce que cela ne couvre pas : la comparaison indique que les lignes diffèrent ; il n'effectue pas de normalisation Unicode pour vous et ne remplace pas les caractères
Text diff ne normalise pas NFC ou NFD, n'identifie pas les éléments confondants, ne supprime pas les marques de largeur nulle et ne produit pas de sortie réparée. Il ne compare pas non plus les octets codés. Ce sont des opérations distinctes avec des conséquences qu’un comparateur de ligne générique ne devrait pas choisir en silence.
Ignorer la casse utilise JavaScript `toLowerCase`, tandis que Ignorer les espaces supprime et condense les clés correspondantes. Aucune des deux opérations ne fournit un classement tenant compte des paramètres régionaux ni un examen de sécurité Unicode. Utilisez le résultat pour affiner une enquête, et non pour certifier que les identifiants sont sûrs ou linguistiquement équivalents.
À retenir : faites confiance à la différence par-dessus vos yeux - conclut qu'une ligne signalée est une réelle différence et montre comment la comparaison de texte de ToolAcre identifie les lignes à inspecter
Lorsque la vue et le différentiel ne sont pas d'accord, supposez que la chaîne mérite une inspection. L'algorithme n'a pas de modèle visuel permettant de se laisser tromper par la mise en forme des polices ; il voit les touches de ligne. Cette limitation est utile car elle empêche les différences cachées de passer simplement parce qu'un navigateur les dessine de la même manière.
Exécutez d'abord la comparaison ordinaire, enregistrez quelle option modifie le résultat et inspectez les points de code avant de les modifier. Cette piste de preuves sépare la normalisation des espaces de la ponctuation ou de la composition et évite l'habitude destructrice de remplacer chaque caractère inhabituel par une approximation ASCII.