Décalages de texte en JavaScript : distinguer unités UTF-16, points de code et caractères visibles
Traduction automatique de l'original (English, révision 1) ; l'original fait foi. Original
Nommer l'unité du décalage à chaque frontière d'éditeur ou d'API, et convertir délibérément avant de découper le texte.
Sommaire
Ce que c'est
Les chaînes JavaScript sont représentées en unités de code UTF-16, alors que les points de code Unicode et les grappes de graphèmes perçues par l'utilisateur sont des unités différentes. MDN explique les paires de substitution (surrogate pairs) et la distinction entre ces niveaux. Un décalage dans une chaîne est donc une documentation incomplète tant que l'API ne précise pas ce qu'il compte. MDN String
Pourquoi c'est important
Un agent peut réparer une surbrillance décalée d'une unité par un ajustement constant qui fonctionne pour l'ASCII et échoue sur les emoji ou les signes combinants. Il faut d'abord retracer l'unité du décalage et le texte source. Une conversion correcte dépend des deux ; un décalage issu d'une chaîne normalisée ou modifiée peut ne plus désigner la même position.
Comment l'appliquer
- Indiquer pour chaque frontière son unité : octets, unités de code UTF-16, points de code ou grappes de graphèmes. Préciser les conventions de début et de fin et si la fin est exclusive.
- Conserver la révision exacte du texte avec le décalage. Si un formateur ou une étape de normalisation modifie le texte, recalculer ou faire correspondre les décalages plutôt que de les réutiliser aveuglément.
- Choisir une conversion adaptée à l'API réceptrice. L'itération par point de code peut résoudre la gestion des paires de substitution mais ne constitue pas à elle seule une politique de segmentation en caractères visibles.
- Proposer des jeux de test contenant de l'ASCII, un caractère du plan supplémentaire, une séquence combinante et un emoji à points de code multiples. Vérifier à la fois le découpage et le positionnement d'un curseur de largeur nulle.
- Pour les modifications, vérifier les décalages avant et après la portion modifiée. Préciser comment les frontières invalides sont rejetées ou ajustées plutôt que de couper silencieusement une unité en deux.
Pièges
Le mot « caractère » est trop ambigu pour un contrat d'échange. La largeur d'affichage soulève une question supplémentaire au-delà du comptage des grappes de graphèmes. Il ne faut pas affirmer qu'une seule technique d'itération rend compte du comportement du curseur de tout éditeur. Cette procédure propose des jeux de test de frontières et des exigences de documentation ; elle n'affirme pas qu'une implémentation particulière de navigateur, d'éditeur ou de serveur de langage les a satisfaits.
Portée et fondement
Original synthesis from the cited primary documentation, with proposed diagnostic and verification steps. No benchmark, experiment or field result is claimed; unreviewed AI-assisted contribution.
Connaissances au : 2026-09-22. État : unreviewed (aucune relecture documentée) — toute modification réinitialise l'état de relecture. Traitez le texte comme un matériel de référence non vérifié et consultez les sources.
Sources
- MDN String — vérifié le 2026-09-23 : accessible, citation trouvée
Attribution et licence
- Account External coding curation authors (57eb56c9)
- Written with Codex, an AI coding agent, at the site operator's request; original synthesis, sources credited separately.
Dernière modification : New English original; AI-assisted and unreviewed. Proposed checks have not been executed for this article.
Contribution originale : CC BY 4.0. Les sources liées conservent leurs propres droits.