Microblog

Microblog

Facile

Instructions

Tu as identifié un manque sur le marché des médias sociaux pour les publications très très courtes. Maintenant que Twitter autorise les publications de 280 caractères, les personnes qui veulent des mises à jour rapides sur les réseaux sociaux ne sont pas servies. Tu décides de créer ton propre réseau social.

Pour rendre ton produit remarquable, tu le rends extrême et tu n'autorises que les publications de 5 caractères ou moins. Toute publication de plus de 5 caractères doit être tronquée à 5.

Pour permettre à tes utilisateurs de s'exprimer pleinement, tu autorises les emoji et les autres caractères Unicode.

La tâche consiste à tronquer à 5 caractères les strings fournies en entrée.

Encodages de texte

Un texte stocké sous forme numérique doit être converti en une série d'octets. Il existe 3 façons courantes de faire correspondre des caractères à des octets.

  • ASCII permet d'encoder les caractères de la langue anglaise. Tous les caractères font exactement 1 octet.
  • UTF-8 est un encodage de texte Unicode. Les caractères font entre 1 et 4 octets.
  • UTF-16 est un encodage de texte Unicode. Les caractères font soit 2, soit 4 octets.

UTF-8 et UTF-16 sont tous deux des encodages Unicode, ce qui signifie qu'ils peuvent représenter une immense variété de caractères, notamment :

  • du texte dans la plupart des langues et écritures du monde
  • des textes historiques
  • des emoji

UTF-8 et UTF-16 sont tous deux des encodages à longueur variable, ce qui signifie que différents caractères occupent une quantité d'espace différente.

Prenons la lettre « a » et l'emoji « 😛 ». En UTF-16, la lettre occupe 2 octets, mais l'emoji en occupe 4.

L'astuce de cet exercice consiste à utiliser des API conçues autour des caractères Unicode (points de code) plutôt que des unités de code Unicode.

Les points de code Unicode face aux unités de code

Une string encodée en UTF-16 « normale » peut être représentée comme une série de caractères, où chaque caractère peut faire jusqu'à 16 bits de long (d'où le nom UTF-16). Cela signifie qu'il y a au maximum 2¹⁶ (deux à la puissance seize), soit 65536 caractères possibles représentables avec 16 bits, soit 1 unité de code. Ces 65536 caractères forment ce qu'on appelle le plan multilingue de base, ce qui est largement suffisant pour les caractères les plus courants de la plupart des langues.

Cependant, certains symboles ne tiennent pas dans une seule unité de code. La solution est de les représenter avec deux unités de code. Ces deux unités de code UTF-16, souvent appelées aussi surrogate pair, forment un point de code.

Donc, en résumé, quand on parle d'encodage UTF-16 :

  • Un code unit correspond à 16 bits (ou moins) représentant un seul caractère.
  • Un code point est une ou deux unités de code qui représentent un seul caractère.

Pour ajouter à la confusion, il y a aussi les grapheme clusters, qui sont en gros des séquences de caractères Unicode (points de code) qu'il faut traiter comme une seule unité visuelle. Par exemple, certains émojis, comme celui-ci 👨‍👦.

UTF-16 en JavaScript

La plupart des méthodes JavaScript intégrées fonctionnent avec des strings encodées en UTF-16, mais elles se basent sur les unités de code UTF-16. Par exemple, la méthode String.prototype.split("") découpe une string en unités de code.

En revanche, les String iterators itèrent par points de code.

Tu peux en lire beaucoup plus, et trouver des exemples sur les strings Unicode, sur MDN.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
JavaScript Exercism

Prêt à commencer Microblog ?

Inscris-toi sur Exercism pour apprendre et maîtriser JavaScript avec 37 concepts159 exercices, et un vrai mentorat humain, le tout gratuitement.