web-dev-qa-db-fra.com

Pourquoi ne devrais-je pas utiliser des caractères Unicode pour simuler des styles typographiques (tels que des minuscules ou des scripts)?

Unicode contient divers caractères qui ressemblent à des variantes stylisées typographiques de l’alphabet latin de base et permettent d’écrire des textes dans les styles typographiques correspondants sans recourir à des balises ou similaires. Par exemple, on peut simuler:

  • Lettres minuscules:

    ᴛʜɪꜱ ꜰᴀɴᴄɪʟy xᴛ.

  • Scénario:

    ????????????????????????? ???????????????? ????????????????????????????? ????????????????????????????? ????????????????.

  • Lettre noir:

    ????????????????????????? ???????????????? ????????????????????????????? ????????????????????????????? ????????????????.

Cela a suscité un intérêt sur Stack Exchange (par exemple, ici , ici et ici ) et des critiques de ces techniques ont été formulées. Mais qu'est-ce qui peut mal tourner quand je les utilise?

124
Wrzlprmft

Général

Ces caractères ne sont pas destinés au texte normal de l'alphabet latin, mais à la phonétique, au texte de l'alphabet cyrillique, pour une utilisation en tant que symboles mathématiques (représentant des variables) ou similaires. Le seul moyen de coder du texte dans l'alphabet latin de base conforme à Unicode consiste à utiliser les caractères principalement utilisés à cette fin (c'est-à-dire à partir du bloc latin de base Unicode).

Comme avec beaucoup d'autres normes, vous devriez réfléchir à deux fois avant de violer Unicode. De plus, Unicode comprend un grand nombre de systèmes d'écriture, de cas d'utilisation et d'éléments qui n'existent que pour la compatibilité avec les versions antérieures1 comprendre pleinement toutes ses motivations est une science à part. Bref récit, à moins que vous ne sachiez vraiment ce que vous faites, il est extrêmement probable que quelque chose se brise auquel vous n’ayez même pas pensé de loin.

Exemples spécifiques

Accessibilité

Le texte codé n’existe pas seulement pour être restitué dans certaines polices. Il peut également être interprété, par exemple, par des lecteurs d’écran. Et un lecteur d'écran ne devrait pas avoir besoin de deviner si

????????????

est censé être l'article défini ou le produit mathématique2 des variables ????, ???? et ???? - C'est pour quoi ces personnages sont faits. Le meilleur comportement sera donc qu’il épelle ces caractères, par ex. disant littéralement ce qui suit:

script gras petit t, script gras petit h, script gras petit e

Il ne devrait pas simplement dire «le» mais plutôt, car il ne lirait pas correctement les textes mathématiques dont les symboles forment un mot prononçable.3

Portabilité

Si votre texte est bien rendu sur votre machine, cela ne signifie pas qu'il le sera également sur celui du lecteur. L'exemple le plus évident est que le lecteur ne dispose d'aucune police prenant en charge ces caractères ou que le texte est rendu par un logiciel ne prenant pas en charge les polices de secours. Certes, cela devient de moins en moins courant. Gardez cependant à l'esprit que certaines personnes, comme les dyslexiques, ont besoin de polices spéciales moins susceptibles de prendre en charge ces caractères.

Mais même si la machine du lecteur n’utilise qu’une police différente, le texte risque d’être considérablement moins lisible. Pour un premier exemple , il s'agit de ???????? ℯ rendu avec deux polices différentes:

 ????????ℯ rendered with FreeSerif and STIX

Free Serif rend le texte tel que vous le souhaiteriez probablement lors de l'utilisation de caractères spéciaux pour simuler du texte, à savoir la simulation de l'écriture manuscrite avec un trait continu. Cependant, ces caractères sont conçus pour être utilisés comme symboles mathématiques, ce qui n’a aucun sens. Par conséquent, le rendu par STIX , spécialement conçu à des fins mathématiques, est plus conforme à la manière dont ces caractères sont destinés à être utilisés.

Dans un second exemple , supposons que le lecteur italicise «сᴜт мy в for» en italique pour une raison quelconque. Avec une bonne police, vous obtiendrez4:

 сᴜт мy вᴀʀ rendered in upright and italics. italics reads as "cum my bar"

La raison en est que les petites majuscules ont été (partiellement) simulées avec des lettres cyrilliques et les italiques cyrilliques ont parfois un aspect très différent de leurs homologues droits . Encore une fois, c'est le comportement approprié.

Possibilité de recherche

En tant que premier exemple, considérez ce que vous voudriez qu'une recherche raisonnable fasse avec le personnage ???? (script mathématique W). Supposons que la recherche comporte deux modes, le mode par défaut _ et le mode exact (généralement appelé sensible à la casse). Ce personnage devrait être:

  • trouvé lors de la recherche de w ou W en mode par défaut - pour ceux qui ne veulent pas se donner la peine d'entrer ou de copier-coller le caractère spécial dans le champ de recherche;

  • trouvé lors de la recherche de ???? en mode exact - pour ceux qui veulent chercher où la variable correspondante est mentionnée dans un document mathématique³;

  • introuvable lors de la recherche de ????, w ou W dans le mode exact en raison de la rupture d'une recherche similaire à celle ci-dessus.

Toutefois, si vous utilisez ce caractère pour simuler du texte normal, vous devez le trouver lors de la recherche de W ou ???? en mode exact, ce qui est en conflit avec ce qui précède.

En tant que second exemple , considérez que les caractères cyrilliques ne doivent jamais être trouvés lors de la recherche de caractères latins et inversement, car ils ont des choses complètement différentes. Toutefois, si vous utilisez des caractères cyrilliques pour simuler des petites majuscules latines, vous devez le faire si vous ne voulez pas que la recherche soit interrompue. Cela amènerait les gens à trouver beaucoup de choses inutiles s'ils cherchaient un mot rare en alphabet latin qui correspond justement aux fausses petites majuscules de certains mots populaires en alphabet cyrillique (et vice versa).

Une option de recherche exacte ne peut pas résoudre ce problème, car il est réservé à d'autres fins dans ces alphabets.

En général , il est impossible de créer une recherche (sans un nombre incroyable d'options) sans interrompre l'utilisation de caractères spéciaux pour simuler un texte latin stylé.


1Vous savez que XKCD à propos de l’échec inévitable d’unification des normes ? Eh bien, Unicode a réussi.
2ou quel que soit l'opérateur vide est dans la convention pertinente
3Je suis conscient que très peu de textes mathématiques soutiennent actuellement cet encodage ou quelque chose de compatible, mais l’essentiel est qu’un jour ils l’espèrent. Votre texte abusant d'Unicode peut toujours être lu et lu.
4Sauf si vous localisez en macédonien ou en serbe, vous obtiendrez un résultat différent mais indésirable.

219
Wrzlprmft

Qu'est-ce qui peut aller mal? Eh bien, je vois ceci:

 enter image description here

dans Firefox 50.1.0 sur Windows 7.

Le problème de glyphes manquants , dans ce cas sur un appareil mobile, est davantage illustré dans une image donnée par l'utilisateur Chris Kent dans un commentaire , que j'ai recadré et redimensionné l'original :

 enter image description here

Et l'utilisateur oals kindly a contribué un autre exemple:

 enter image description here

66
Andrew Morton

J'ai un problème avec XY.

 Y and X appear smaller than the rest of the text

Ici, nous voyons que Y et X semblent plus petits que le reste du texte. À certains niveaux de zoom, elles semblent avoir la même taille, mais cela semble avoir mis en évidence un problème avec ces glyphes particuliers dans cette police.

28
Michael Hampton

En utilisant des caractères non latins qui ressemblent un peu à des caractères latins, vous êtes en compagnie de spammeurs, de pornographes et de gens féroces qui veulent savoir ce qu'ils sont en train de faire pour que leur texte soit incompréhensible, indéfinissable et répudiable. ("Je n'ai jamais dit que c'était sans danger !! J'ai dit que c'était sigma-alpha-integral-sign-epislon !!! Je ne peux pas me poursuivre en justice !!!")

Si vous êtes à l'aise dans ce club, allez-y.

13
CCTO