Caractères unicode pour icônes d'interface courantes

web,html,css

a marqué ce sujet comme résolu.

Bonjour,

Beaucoup de sites utilisent aujourd’hui des caractères unicode particuliers à la place d’icônes, même petites, pour illustrer des éléments d’interface utilisateur courants. Par exemple, je sais que les paramètres sont souvent symbolisées par une roue dentée. OU bien l’accueil par une maison. Ou encors "sauvegarder" par une disquette (ce n’est peut-être plus d’actualité vu que les disquettes n’existent plus depuis un moment déjà).

La roue dentée, je crois que j’ai trouvé, ça doit être celle-ci: ⚙ avec le point de code U+2699. Je pense avoir aussi trouvé le symbole qui veut dire correct: ✓ et incorrect: ઞ de points de code U+2713 et U+2718.

Première question: est-ce que vous confirmez que ce que j’ai dit jusqu’ici est correct ?

Seconde question: je cherche les caractères à utiliser pour les éléments suivants: accueil, login, logout, recherche, statistiques, icône d’information, icône attention, icône d’erreur, message lu, message non lu. Pouvez-vous m’aider ? J’ai beau essayer de rechercher dans la table officielle d’unicode et leur description des caractères, je ne trouve pas… Pourtant je suis à peu près certain qu’ils existent. Si vous connaissez une liste de caractères avec une description fonctionnelle et non pas une description visuelle neutre, i.e. ce pourquoi tel ou tel caractère est couramment utilisé, ce serait encore mieux, mais je n’en ai pas trouvé non plus.

Troisième question, et non des moindres: est-ce que je dois faire quelque chose de particulier pour que ces caractères puissent s’afficher sur ma page web ? Dois-je par exemple choisir une police bien particulière genre symbols ou windings ou pas du tout ? Il existe des centaines de polices à télécharger sur Internet, mais est-ce indispensable étant donné que ces caractères font partie du jeu de base d’unicode ? Pour l’instant je ne m’intéresse pas à afficher l’icône de facebook ou de twitter. Enfin bref, comment ça marche ?

L’objectif est que ça marche bien évidemment avec les 4 navigateurs majeurs (Chrome, Safari, Firefox, Edge), sur téléphone comme sur ordinateur. Je pense qu’on peut gentiment commencer à oublier IE.

Quatrième et dernière question: la même que pour la troisième, mais cette fois-ci pour afficher des émojis dans la zone U+1FXXX. ON m’a déjà dit que certains ne s’affichaient pas… Du point de vue du codage brut en UTF-8 et UTF-16, je suis au point, ça s’enregistre et ça se stocke et se gère apparament bien en base de donnée, en Java, en PHP; mais pas en matière d’affichage visiblement. Que pourrait-il me manquer ?

Merci pour vos réponses !

+0 -0

Première question: est-ce que vous confirmez que ce que j’ai dit jusqu’ici est correct ?

QuentinC

Les points de code que tu cires sont corrects.

Seconde question …

QuentinC

Je ne connais pas de référence qui réponde à ta question. Tu peux aussi trouver des émoticônes qui te conviennent (ici).
Et des dingbats ici : https://unicode-table.com/fr/blocks/dingbats/
Par contre, ces sites ne sont pas adaptés aux non-voyants. Ilva falloir te fier aux éventuelles descriptions textuelles.

Troisième question, et non des moindres: est-ce que je dois faire quelque chose de particulier pour que ces caractères puissent s’afficher sur ma page web ?

QuentinC

Les navigateurs à jour vont tous afficher les caractères Unicode que tu cites. Ils affichent aussi la majorité des caractères utilisés de nos jours.

Quatrième et dernière question: la même que pour la troisième, mais cette fois-ci pour afficher des émojis dans la zone U+1FXXX. ON m’a déjà dit que certains ne s’affichaient pas…

QuentinC

Les caractères affichables sont limité par la police de caractère utilisé. Je ne connais pas de police qui serait capable d’afficher n’importe quel caractère.
Par exemple, dans le bloc que tu cites, il est peu probable que 'LINEAR B SYLLABLE B008 A' (U+10000) s’affiche, parce que le linéaire B l’affaire de linguistes ou archéologues spécialisés.
Tu peux facilement voir le rendu dans un navigateur avec le site https://www.fileformat.info/info/unicode/char/2699/index.htm

Dans la zone que tu cites, les émoticônes vont s’afficher, par exemple :

😀 U+1F600 GRINNING FACE

Merci pour vos réponses !

QuentinC

Comme tu es déjà au point sur UTF-8, je ne vais pas te recommander mon article L’encodage UTF-8 à la main !!

+0 -0

Bonjour,

Je ne connais pas de référence qui réponde à ta question. Tu peux aussi trouver des émoticônes qui te conviennent ( ici). Et des dingbats ici : https://unicode-table.com/fr/blocks/dingbats/

J’ai déjà trouvé de telles tables similaires à celles que tu as mises en lien. Malheureusement, ça ne répond pas vraiment à la question de savoir lequel est habituellement utilisé pour telle fonction. J’ai toujours l’embarras du choix et j’aimerais bien ne pas l’avoir…

Les navigateurs à jour vont tous afficher les caractères Unicode que tu cites.

Dans la plage que tu cites, les émoticônes vont s’afficher, par exemple :
U+1F600 GRINNING FACE

C’est ce qui compte pour mes questions n°3 et n°4. C’est parfait, merci.

Comme tu es déjà au point sur UTF-8, je ne vais pas te recommander mon article L’encodage UTF-8 à la main

JE l’ai déjà lu en fait ! Je savais la plupart des choses, mais ça a été un bon rafraîchissement.

A l’occasion, ça pourrait aussi être intéressant de parler un peu de UTF-16 parce que je me suis quand même un peu pris la tête avec ça pour pouvoir les transférer correctement en JSON. La bibliothèque que j’utilise en Java a quelques difficultés à l’encodage, si je désactive l’échappement \uXXXX de tous les caractères hors ASCII, elle me sort de l’UTF-8 invalide avec les émojis (pour une paire UTF-16 \uD[8-B]XX+\uD[C_F]XX, elle encode trivialement deux caractères UTF-8 sur 3 octets dans la zone interdite plutôt qu’un seul caractère sur 4 octets).

Merci et bon dimanche un peu en avance.

+0 -0
  1. Roue dentée: ⚙

    Effectivement tu peux utiliser U+2713 et U+2718 (✓ et ✘) pour dire correcte ou incorrecte. Mais j’ai tendance à utiliser personnellement U+2714, U+FE0F ✔ et U+2716, U+FE0F ✖ (✔️ et ✖️) qui sont leur version grossie mais également sur deux points de code, par tout à fait pratique.

  2. Si tu as cherché dans la description officielle des points de code de l’Unicode alors on ne peut pas t’aider beaucoup plus. La plupart de ces significations sont non officielles et absolument pas universelles.

  3. Le charset que tu dois correctement déclarer le charset de ta page HTML au début. Tu vois le tag meta correspondant ? <meta charset="utf-8">. Eh bien c’est à peu près tout.

  4. Je ne saurais pas vraiment répondre mais souvent les émojis sont affichés avec la police du navigateur par défaut dédié (ou à défaut du système). Car les polices courantes n’embarquent pas le support des émojis. Je me renseignerais pour ces émojis spécifiquement.

Un conseil que je te donnerais serait de ne pas trop utiliser les émojis pour leurs sens communs mais plutôt une image simple. C’est peut-être plus lourd en point mais tu peux mettre un texte alternatif. Je pense que tu es d’autant plus au courant de ces problèmes-là que nous, je doute que les logiciels d’assistance à la lecture interprète bien tous les émojis.

Je compléterais ma réponse plus tard, à bientôt. \o

+1 -0

Ces sites utilisent généralement des polices de caractères qui modifient le rendu des caractères d’intérêt, ou alors des icônes SVG (mais je suppose que tu ne parlais pas de ça).

Les émojis, comme n’importe quel caractère unicode, s’affichent fonction de la police. Il existe des polices avec divers sets d’émojis, par exemple Noto Emoji (il y en a d’autres). Le rendu des émojis en l’un des styles existants va dépendre de la police utilisée.

Une autre solution, sur le web, est d’utiliser un outil JavaScript qui remplace les caractères Unicode par un SVG. Twitter propose un tel outil pour ses émojis.

+1 -0

Bonjour,

Un conseil que je te donnerais serait de ne pas trop utiliser les émojis pour leurs sens communs mais plutôt une image simple. C’est peut-être plus lourd en point mais tu peux mettre un texte alternatif. Je pense que tu es d’autant plus au courant de ces problèmes-là que nous, je doute que les logiciels d’assistance à la lecture interprète bien tous les émojis.

Ils ont fait d’énormes progrès ces dernières années. Par exemple le lecteur d’écran Jaws, traditionnellement plutôt en retard sur ces questions, reconnaît malgré tout plus de 5000 symboles dans sa dernière version , et VoiceOver sur iOS c’est probablement encore beaucoup plus puisqu’Apple est plutôt du côté des pionniers.

Il ne faut évidemment pas partir du principe qu’ils sont reconnus et oublier d’indiquer un texte alternatif, ce serait une erreur. Mais si je peux rendre mes pages plus agréables sans détruire la’ccessibilité, ce serait bien.

Peut-être effectivement que des petites images en SVG sont plus indiquées que des caractères unicodes. JE ne sais pas trop juger. L’avantage des caractères unicode, c’est qu’on peut en changer la taille et la couleur comme on veut, sans perte de qualité. Bien utile si on prévoit plusieurs habillages (normal, dark mode, contraste élevé, etc.)

En fait je ne trouve pas ce qu’il me faut dans la table unicode car les descriptions des caractères sont objectives, pas fonctionnelles. Par exemple, pour un caractère symbolisant un bouton play/pause, on a une description du type "Triangle pointant à droite vers deux barres verticales". Si je ne sais pas qu’un triangle pointant à droite suivi de deux barres verticales dénote généralement un bouton multimédia "play/pause", je ne peux pas le deviner à partir de cette description. Or je n’ai aucune idée de ce à quoi ressemblent les icônes pour login et logout par exemple… Bien sûr, je ne peux pas juger pour les asiatiques, mais pour les occidentaux, ce genre de symbole est probablement universel.

+2 -0

En fait je ne trouve pas ce qu’il me faut dans la table unicode car les descriptions des caractères sont objectives, pas fonctionnelles. Par exemple, pour un caractère symbolisant un bouton play/pause, on a une description du type "Triangle pointant à droite vers deux barres verticales". Si je ne sais pas qu’un triangle pointant à droite suivi de deux barres verticales dénote généralement un bouton multimédia "play/pause", je ne peux pas le deviner à partir de cette description.

Je pense que tu parles de U+23EF ? En effet, Unicode nomme (il s’agit du nom et non de la description) les caractère de manière objectivement descriptive et non par rapport aux fonctionnalités. Je mets ce dernier mot au pluriel car un « caractère » peut être détourné de son usage ou autrement dit a un usage dont l’interprétation dépend du contexte (même pour nos caractères usuels, il suffit de penser aux rébus et aux charades par exemple, si on reste dans une même langue.) Cependant ces symboles sont regroupés par blocs logiques et il convient souvent de rechercher le bloc correspondant au domaine en question (ou le script correspondant à la langue en question). Dans cet exemple, ces symboles sont normalisés ISO/IEC 18035

je ne peux pas le deviner à partir de cette description. Or je n’ai aucune idée de ce à quoi ressemblent les icônes pour login et logout par exemple… Bien sûr, je ne peux pas juger pour les asiatiques, mais pour les occidentaux, ce genre de symbole est probablement universel.

Il se trouve qu’il n’y a pas vraiment de symbole standard pour cela… Tu remarqueras qu’aucun appareil/site/etc, ne te propose les mêmes icônes pour ces deux actions/événements… Ce qui peut probablement émerger comme standard de fait, ce sont les boîtes carrées ouvertes d’un côté avec une flèche.
Cf. les icônes Font Awesome : fa-sign-in et fa-sign-out
J’ai vu une belle réalisation en CSS aussi : gg-log-out et gg-log-in

+0 -0

Un conseil que je te donnerais serait de ne pas trop utiliser les émojis pour leurs sens communs mais plutôt une image simple. C’est peut-être plus lourd en point mais tu peux mettre un texte alternatif. Je pense que tu es d’autant plus au courant de ces problèmes-là que nous, je doute que les logiciels d’assistance à la lecture interprète bien tous les émojis.

ache

Est-ce qu’on pourrait pas garder malgré tout les emojis (en supposant que du vrai texte y soit accolé) sans que les lecteurs ne les prennent en compte ? Soit avec ARIA (que je connais pas plus que ça en vrai) ou bien en gérant en CSS à coup de ...:before { content: '[EMOJI]'; } appliquée à des span par exemple ?

Ne garder que des emojis (ou des images au sens où l’entend HTML) peut s’avérer abscons, et ce pour tout le monde j’ai l’impression. À moins d’être devin nul ne peut deviner du premier coup la signification d’un menu un peu complexe de façon purement graphique. Il me semble que Google l’avait appris à ses dépens sur je ne sais plus quel produit (était-ce GMail ?).

Donc de toute façon, ne faudrait-il pas garder du texte dans tous les cas ? (quitte à laisser aux power users habitués la possibilité de changer)

Bien sûr, je ne peux pas juger pour les asiatiques, mais pour les occidentaux, ce genre de symbole est probablement universel.

En effet, les emojis ne sont pas universels dans l’absolu et on peut avoir plusieurs emojis pour la même signification. Par exemple l’emoji « 🈲 » (U+1F232, bouton de l’idéogramme kin) indique une interdiction pour un Japonais1. Les Occidentaux utiliseraient sûrement plutôt « 🚫 » (U+1F6AB, cercle barré) ou encore « ⛔ » (U+26D4, panneau sens interdit).

Je soupçonne que même entre deux générations on n’accorderait pas nécessairement à un même emoji le même sens. Est-ce que mes parents de ~60 ans comprendraient le « 🙃 » (U+1F643, tête souriante renversée, espiègle, ironique) comme mes amis le comprennent ?

Or je n’ai aucune idée de ce à quoi ressemblent les icônes pour login et logout par exemple…

Je pourrais sûrement le deviner de façon contextuelle sur une UI, mais sinon dans l’absolu je ne vois aucun symbole pouvant se prévaloir d’être universellement admis pour désigner ces concepts. Placé n’importe où dans l’UI, je pourrais sûrement les rater et passer à côté de leur sens.

Désolé d’avoir un peu dérivé, mais tout ça pour dire que comme quoi, ces emojis sont bien moins universels qu’on ne le pense ^^


  1. l’emoji est dans la catégorie Unicode des écriteaux japonais, mais l’idéogramme de la notion d’interdiction représenté dessus serait compréhensible pour une personne comprenant une langue avec cet idéogramme : mandarin, coréen (hanja), etc.
+2 -0

Bonsoir,

A l’occasion, ça pourrait aussi être intéressant de parler un peu de UTF-16 parce que je me suis quand même un peu pris la tête avec ça pour pouvoir les transférer correctement en JSON.

Je ne connais pas d’usage d’UTF-16. Pour les boîtes de dialogue, le menus, les messages, Windows 95 utilise en interne un codage sur 16bits mais ce n’est pas de l’UTF-16, car rien n’est prévu pour les points de code à partir de 216.

A mon sens, pour du contenu web, il faut utiliser UTF-8. J’ai cru comprendre que certains langages utilisaient UTF-32 en interne : Python et Java par exemple. C’est sans doute utilisé aussi dans gestionnaires de bases de données.

La bibliothèque que j’utilise en Java a quelques difficultés à l’encodage, si je désactive l’échappement \uXXXX de tous les caractères hors ASCII, elle me sort de l’UTF-8 invalide avec les émojis (pour une paire UTF-16 \uD[8-B]XX+\uD[C_F]XX, elle encode trivialement deux caractères UTF-8 sur 3 octets dans la zone interdite plutôt qu’un seul caractère sur 4 octets).

Je n’ai pas tout compris, mais ce n’est pas grave.
Les émoticônes se codent sur 4 octets en UTF-8, et aussi comme tu l’écris sur une paire de "surrogate" en UTF-16. Bien sur, si la bibliothèque ne gère pas correctement l’encodage UTF-8 les points de code à partir de 216, ça ne va pas marcher comme tu voudrais.

Source:QuentinC

+0 -1

Ils ont fait d’énormes progrès ces dernières années. […]

Oh ! Merci beaucoup pour ces précisions.

Par exemple, pour un caractère symbolisant un bouton play/pause, on a une description du type "Triangle pointant à droite vers deux barres verticales". Si je ne sais pas qu’un triangle pointant à droite suivi de deux barres verticales dénote généralement un bouton multimédia "play/pause", je ne peux pas le deviner à partir de cette description.

Je comprends pleinement ton problème. As-tu essayé les short codes des caractères unicode ? Ou le “CLDR Short Name” ? Pour trouver un emoji, personnellement, je me base sur les codes courts de gemoji, mais il en existe d’autres !

Tiens par exemple dans cette version json du CLDR : Ligne 18379 à ligne 18391 (attention fichier lourd, je copie les lignes ici) :

      "⏯": {
        "default": [
          "arrow",
          "pause",
          "play",
          "play or pause button",
          "right",
          "triangle"
        ],
        "tts": [
          "play or pause button"
        ]
      },

Donc c’est bien un nom officiel. Mais bon, chercher dans les données du CLDR est tout sauf pratique.

+3 -0

Est-ce qu’on pourrait pas garder malgré tout les emojis (en supposant que du vrai texte y soit accolé) sans que les lecteurs ne les prennent en compte ? Soit avec ARIA (que je connais pas plus que ça en vrai) ou bien en gérant en CSS à coup de …:before { content: '[EMOJI]'; } appliquée à des span par exemple ?

Si, bien sûr qu’on peut faire ça. La technique classique se résume à ceci:

<span class="sr_only">Texte réservé aux lecteurs d'écran invisible à l'écran</span>
<span aria-hidden="true">Texte visible à l'écran mais ignoré par les lecteurs d'écran</span>

Où .sr_only est une classe CSS présente dans plusieurs frameworks, parfois aussi appelée visually-hidden, screen-reader, ou des noms approchant. De mémoire le code CSS correspond plus ou moins à:

.sr_only {
position: absolute !important;
border: 0 !important;
height: 1px !important; 
padding: 0 !important;
overflow: hidden !important;
clip: rect(0, 0, 0, 0) !important;
left: -2px !important;
top: auto !important;
}

Ne garder que des emojis (ou des images au sens où l’entend HTML) peut s’avérer abscons, et ce pour tout le monde j’ai l’impression. À moins d’être devin nul ne peut deviner du premier coup la signification d’un menu un peu complexe de façon purement graphique. Il me semble que Google l’avait appris à ses dépens sur je ne sais plus quel produit (était-ce GMail ?).

Ah, c’est bon à savoir ça. Il ne faudrait donc pas négliger le texte, et pas uniquement pour les lecteurs d’écran.

Je me demande du coup comment ils font pour aligner 5 ou 6 boutons / éléments de menu / onglets horizontalement sur mobile sans que ce soit complètement illisible.

Par ailleurs je viens de découvrir que la place disponible en pixels était plus grande sur mon iPhone que sur PC, et pourtant c’est la même taille de police qui est utilisée par défaut. Mon petit test révèle que sans rien préciser nulle part, dans les deux cas 1em = 16px. Sur PC, la fenêtre de Chrome s’est dimensionnée d’elle-même à quelque chose comme 1025x800, contre 960x1600 sur iPhone. Un petit calcul rapide m’indique donc que je pourrais théoriquement afficher 100 lignes de 60 caractères. Ca me parait assez inconcevable.

Désolé d’avoir un peu dérivé, mais tout ça pour dire que comme quoi, ces emojis sont bien moins universels qu’on ne le pense

C’est pas grave, moi aussi je dérive, comme tu peux le constater. Ces explications et exemples restent bien utiles. Merci.

Je ne connais pas d’usage d’UTF-16. Pour les boîtes de dialogue, le menus, les messages, Windows 95 utilise en interne un codage sur 16bits mais ce n’est pas de l’UTF-16, car rien n’est prévu pour les points de code à partir de 216.

Ca ne doit plus être tout à fait vrai sous windows 10 et 11. En interne, c’est toujours un codage sur 16 bits qui est utilisé, mais il y a forcément quelque chose de prévu, car on peut très facilement taper des émojis. Il y a un raccourci Windows+point qui ouvre une boîte de sélection. Je ne sais pas s’ils s’affichent toujours correctement, mais en tout cas même dans notepad, ils s’ajoutent et s’enregistrent bien. D’ailleurs, depuis quelques versions de Windows 10 et sous Windows 11, l’encodage par défaut de notepad est UTF-8 ! (et plus ANSI alias CP1252).

A mon sens, pour du contenu web, il faut utiliser UTF-8. J’ai cru comprendre que certains langages utilisaient UTF-32 en interne : Python et Java par exemple. C’est sans doute utilisé aussi dans gestionnaires de bases de données.

UTF-16 (ou en tout cas un codage sur 16 bits très proche) est utilisé pour les chaînes de caractère dans certains langages, comme Java ou JavaScript. Si le langage connaît la notation \uXXXX, mais pas \UXXXXXXXX, alors à mon avis il y a de fortes chances pour qu’il travaille en interne sur des caractères sur 16 bits. C’est le cas de Java et surtout de JavaScript, et donc par extension en JSON.

Sauf erreur, Python est un peu plus malin, et choisit UTF-8, UTF-16 ou UTF-32 au cas par cas en essayant d’être économe.

En base de donnée ils font des trucs plus bizarres, sans doute pour palier aux potentielles lenteurs qu’implique les recherches dans les chaînes encodées avec des encodages à longueur variable. Par exemple, avec MariaDB/MySQL, on peut choisir entre deux familles: utf8 et utf8mb4. Le second peut enregistrer n’importe quelle chaîne en UTF-8 mais pas le premier, qui est limité aux caractères stockables sur 3 octets. N’utilisant que rarement les émojis moi-même, j’ai d’ailleurs mis du temps à piger pourquoi certains posts provoquaient des erreurs.

Je n’ai pas tout compris, mais ce n’est pas grave.

Java travaille nativement en UTF-16. L’encodeur ne traite pas les paires surrogate spécialement comme il devrait, ce qui fait qu’au lieu d’encoder une paire correctement en un seul caractère UTF-8 sur 4 octets, il encode comme deux caractères ordinaires. Or les caractères U+D800 à U+DFFF sont explicitement interdits en UTF-8 pour éviter toute confusion.

Le problème est résolu automatiquement si on demande à l’encodeur d’échapper tous les caractères hors ASCII imprimable (U+0020 à U+007E) et non pas uniquement ceux qu’on est strictement obligé d’'échapper, car on encodera alors la paire via deux \uXXXX. C’est en fait la seule façon d’échapper un caractère >=U+10000, car JSON ne connaît pas de notation \UXXXXXXXX.

Je comprends pleinement ton problème. As-tu essayé les short codes des caractères unicode ? Ou le “CLDR Short Name” ? Pour trouver un emoji, personnellement, je me base sur les codes courts de gemoji, mais il en existe d’autres !

Ah non, je ne connais pas du tout, et ça m’a l’air intéressant comme classement. Je vais télécharger leur liste et voir ce que je peux faire avec. Merci !

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte