Votre titre arabe n'est pas corrompu — la boutique le lit dans l'autre sens

8 min de lectureChaque chiffre est sourcé

Quand un titre arabe, persan ou ourdou arrive dans une boutique avec la parenthèse du mauvais côté, la mention « feat. » repoussée à l'autre bout, ou un numéro de catalogue flottant là où il ne devrait pas être, rien n'a été corrompu. Les octets que vous avez saisis sont presque toujours les octets qui sont arrivés. Ce qui a changé, c'est la direction de base de la zone dans laquelle le texte est dessiné, et celle-ci est décidée par la page de la boutique, pas par votre titre. Cet article explique le mécanisme avec assez de précision pour que vous puissiez prévoir lesquels de vos titres vont se déformer avant de les livrer.

Une chose à dire d'emblée, parce que c'est la position honnête : nous ne connaissons aucune mesure publiée des taux d'erreur sur les métadonnées en écriture arabe, nulle part dans la profession. Le problème est universellement vécu et entièrement non quantifié. Aucun chiffre ne figure ci-dessous, parce qu'il n'y a aucun chiffre à donner.

L'ordre logique et l'ordre d'affichage sont deux choses différentes

Unicode stocke le texte en ordre logique — l'ordre dans lequel vous le dites, le saisissez et le lisez à voix haute. L'ordre d'affichage en est calculé au moment du rendu, par l'algorithme bidirectionnel Unicode défini dans l'annexe standard Unicode n° 9 (UAX #9). L'annexe est catégorique sur cette séparation : « The Unicode Standard prescribes a memory representation order known as logical order », et « When working with bidirectional text, the characters are still interpreted in logical order—only the display is affected. »

Cette seule phrase explique le phénomène qui fait croire aux artistes en écriture arabe que leurs métadonnées sont hantées : la chaîne stockée peut être parfaitement correcte alors que l'affichage est faux, et elle peut être visuellement correcte alors que les octets stockés sont faux — et à l'écran les deux défauts se ressemblent trait pour trait. Vous ne pouvez pas auditer cela à l'œil. L'agent d'assistance de votre distributeur non plus.

Pourquoi un mot latin à l'intérieur d'une chaîne RTL se déplace

UAX #9 attribue à chaque caractère un type bidirectionnel. Les lettres arabes, persanes et ourdoues sont AL (lettres arabes de droite à gauche). Les lettres latines sont L. Les chiffres ASCII sont EN (European Number), les chiffres arabo-indiens sont AN (Arabic Number). Les espaces et la plupart des signes de ponctuation — y compris les parenthèses, les crochets, le trait d'union et le point — sont neutres, c'est-à-dire qu'ils n'ont pas de direction propre et héritent de celle de leur entourage.

Deux groupes de règles font les dégâts.

Direction du paragraphe, règles P2–P3. L'algorithme cherche le premier caractère directionnel fort et en déduit la direction de base. Un titre qui commence par un mot latin obtient une direction de base de gauche à droite, même si tout ce qui suit est en persan.

Résolution des neutres, règles N1–N2. Règle N1 : « A sequence of [neutrals] takes the direction of the surrounding strong text if the text on both sides has the same direction. » Règle N2 : les neutres sans consensus prennent la direction du paragraphe. Puis la règle L2 réordonne pour l'affichage — « reverse any contiguous sequence of characters that are at that level or higher. »

Mettez cela bout à bout et la défaillance est déterministe, pas aléatoire. Un élément latin — le nom d'un remixeur, feat., Vol. 2, un numéro de catalogue, une année — se situe à un niveau d'imbrication différent de l'arabe qui l'entoure. Les neutres à ses frontières (l'espace, la parenthèse ouvrante) ont de l'arabe d'un côté et du latin de l'autre : N1 ne trouve donc aucun consensus et N2 leur attribue la direction du paragraphe. Une parenthèse qui se résolvait dans un sens dans votre éditeur de texte de droite à gauche se résout dans l'autre sur une page de boutique de gauche à droite, et la parenthèse se détache et bascule.

Ainsi, نام آهنگ (Nima Remix) n'est pas cassé. C'est une seule chaîne résolue dans deux contextes. La direction de base relève du contexte, pas du contenu, et le contexte de la boutique n'est pas le vôtre.

La seule chose à ne jamais faire

Ne « corrigez » pas l'affichage en saisissant les caractères à l'envers jusqu'à ce que l'aperçu paraisse juste.

Cela produit une chaîne fausse en ordre logique, juste dans exactement un contexte de rendu, et cassée partout ailleurs — y compris dans la recherche, le tri, la mise en correspondance des artistes et toute boutique dont la page a une direction de base différente de celle de l'outil dans lequel vous l'avez « corrigée ». Vous aurez transformé un problème d'affichage, qui est réversible, en un problème de données, qui ne l'est pas.

UAX #9 définit bien des caractères pour contrôler cela explicitement : les isolats LRI, RLI, FSI et PDI, et les marques LRM, RLM et ALM. Ce sont techniquement la bonne solution. Ce sont aussi des caractères de formatage invisibles, et beaucoup de chaînes de livraison suppriment les caractères de formatage invisibles sans vous prévenir. Considérez-les comme peu fiables dans un champ de métadonnées.

La correction structurelle : sortir l'élément latin du milieu

L'atténuation qui fonctionne partout, dans tous les moteurs de rendu, sans aucun caractère invisible, est structurelle. Par ordre de préférence :

  • Utilisez des champs distincts plutôt que des chaînes à direction mixte partout où le modèle de données le permet. Un artiste invité relève du rôle d'artiste, pas du titre. Le Music Metadata Style Guide de Music Biz recommande de créditer les artistes invités au niveau du rôle d'artiste et de ne pas porter cette information dans le titre du morceau ou de la sortie ; la consigne publique de Spotify est : « You shouldn't include any artists' names in your track or release titles. » Une version relève du champ version, dont le rôle entier est de distinguer deux enregistrements qui partagent un titre. Chaque élément latin que vous déplacez dans son propre champ est une frontière bidirectionnelle qui cesse d'exister.
  • Gardez tout élément latin inévitable hors de la première position. La première position fixe la direction du paragraphe selon P2–P3. Un titre persan qui s'ouvre sur un mot latin est un paragraphe de gauche à droite contenant du persan, ce qui n'est pas ce que vous vouliez.
  • Évitez la ponctuation décorative aux frontières de direction. Tirets, barres obliques, barres verticales et crochets empilés sont des neutres placés exactement là où l'algorithme dispose du moins d'information.

Lorsqu'un contrat impose réellement la mention dans le titre, les conventions sont fixes et méritent d'être suivies à la lettre. Music Biz, à propos de « feat. » et « with » : « when included in the title are generally lowercase and in English. » Le guide de style d'Apple : « Formatting of 'feat.' and 'with' must be lowercase, in English, not localized, and in parentheses or brackets. » Cette consigne « not localized » fait ici un vrai travail — ne traduisez pas « feat. » en arabe, en persan ou en ourdou dans un champ de titre. C'est un jeton lisible par machine, pas un mot.

Les chiffres, et pourquoi les vôtres ne sont peut-être pas ceux que vous croyez

Trois jeux de chiffres sont en jeu :

JeuPoints de codeUtilisé enClasse bidi
ASCII0–9partoutEN
arabo-indienU+0660–U+0669 (٠١٢٣٤٥٦٧٨٩)arabeAN
arabo-indien étenduU+06F0–U+06F9 (۰۱۲۳۴۵۶۷۸۹)persan, ourdouEN

Ce ne sont pas des variantes stylistiques. Ce sont des points de code différents et, selon la base de données de caractères Unicode, ils ne partagent même pas la même classe bidirectionnelle. La règle W2 d'UAX #9 requalifie un nombre européen en nombre arabe lorsque le caractère fort précédent le plus proche est une lettre arabe : à l'intérieur d'un texte persan, les deux peuvent donc se comporter pareillement à l'affichage — mais jamais au tri, à la recherche ou à la comparaison de chaînes, parce que ce sont des caractères différents. Un « Vol. 2 » saisi avec un ۲ arabo-indien étendu et un « Vol. 2 » saisi avec un 2 ASCII sont deux chaînes différentes qui se ressemblent presque parfaitement.

Choisissez un jeu de chiffres par catalogue et ne mélangez jamais les jeux à l'intérieur d'une même chaîne.

Comment vérifier ce que vous avez réellement saisi

L'affichage n'est pas fiable : vérifiez donc les octets. Trois choses valent la peine d'être faites avant chaque livraison :

  1. Lisez la chaîne comme des points de code, pas comme des glyphes. Tout outil qui vous montre les valeurs U+ vous dira instantanément s'il s'agit d'un ی persan (U+06CC) ou d'un ي arabe (U+064A), d'un ک persan (U+06A9) ou d'un ك arabe (U+0643) — une distinction que la plupart des polices aplatissent et qu'aucun relecteur ne peut voir. Il en va de même d'un tatwil égaré (U+0640), qu'aucune forme de normalisation Unicode ne supprime, et d'une antiliaison sans chasse (U+200C) qu'un champ de formulaire a silencieusement avalée.
  2. Collez le titre dans un contexte de gauche à droite et dans un contexte de droite à gauche, puis comparez. Si la ponctuation ne tombe pas au même endroit dans les deux, vous avez une chaîne à direction mixte et un élément latin qui devrait être dans son propre champ.
  3. Comparez avec votre sortie précédente, caractère par caractère, et non à l'œil. Les catalogues scindés en écriture arabe sont presque toujours causés par une différence invisible : une sortie saisie sur une disposition de clavier persane, la suivante sur une arabe.

Les outils de Mazufa tournent entièrement dans votre navigateur — aucun fichier audio ni aucun texte n'est téléversé — et ils appliquent automatiquement dir="rtl" lorsqu'un titre est de droite à gauche, si bien que ce que vous voyez en saisissant correspond au contexte pour lequel la chaîne a été écrite. mazufa.com héberge aussi un vérificateur de métadonnées gratuit qui s'exécute sur votre propre appareil et signale plusieurs des cas invisibles : jeux de chiffres mélangés, tatwil, ZWNJ égaré ou manquant, yeh et kaf arabes contre persans, et chaînes non-NFC.

Ce qu'il faut faire avant de livrer

Prenez le titre et le nom d'artiste de votre prochaine sortie et faites quatre choses. Déplacez chaque élément latin que vous pouvez dans son propre champ — artistes invités vers le rôle d'artiste, versions vers le champ version. Assurez-vous que rien ne commence par un mot latin. Uniformisez votre jeu de chiffres et supprimez tout tatwil. Puis lisez une fois la chaîne comme des points de code, et enregistrez cette chaîne exacte comme l'orthographe canonique que vous réutiliserez sur chaque sortie future, sans la ressaisir.

Si un titre doit malgré tout porter un élément latin en son milieu, livrez-le et acceptez qu'il s'affiche différemment selon les endroits. C'est un résultat d'affichage, pas un dommage. La chaîne est correcte. La ressaisir à l'envers pour qu'un aperçu paraisse juste est le seul moyen de la rendre réellement fausse.

Sources

  • Unicode Standard Annex #9, Unicode Bidirectional Algorithm (Revision 51, Unicode 17.0.0, 2025-08-13) — https://www.unicode.org/reports/tr9/
  • Unicode Standard Annex #15, Unicode Normalization Forms (Version 57, Unicode 17.0.0, 2025-07-30) — https://www.unicode.org/reports/tr15/
  • Unicode Character Database — propriétés des caractères : classe bidirectionnelle, mappages de décomposition — https://www.unicode.org/ucd/
  • Music Business Association, Music Metadata Style Guide v2.1 — https://www.musicbiz.org/wp-content/uploads/2016/04/MusicMetadataStyleGuide_V2.1.pdf
  • Apple Music Style Guide — https://help.apple.com/itc/musicstyleguide/en.lproj/static.html
  • Spotify for Artists, Music metadata guidelines — https://support.spotify.com/us/artists/article/metadata-formatting-guidelines/

Le corpus donne les dates de version et de révision de ces documents, telles que listées ci-dessus, et n'enregistre pas de date de lecture distincte pour eux.

OUTILS GRATUITS

Tous les outils que développe Mazufa tournent dans votre navigateur, ne coûtent rien et ne demandent aucun compte.

Ouvrir la boîte à outils ⇥