22 points par GN⁺ 2023-10-03 | 3 commentaires | Partager sur WhatsApp
  • Il y a 20 ans, Joel soulignait déjà, avec son "There Ain't No Such Thing As Plain Text", qu'il est indispensable de comprendre les encodages
  • Unicode est un standard qui unifie toutes les langues humaines afin de pouvoir les utiliser sur ordinateur
  • Il s'appuie sur un système de points de code attribuant un numéro unique à chaque caractère
  • Le plus grand point de code est 0x10FFFF, ce qui fournit un espace d'environ 1,1 million de points de code
  • UTF-8 est l'encodage le plus courant, utilisé avec une probabilité de 98 %
  • UTF-8 est un encodage à longueur variable, dans lequel un point de code peut être encodé sous forme de séquence de 1 à 4 octets
  • UTF-8 est compatible au niveau des octets avec ASCII et est efficace en espace pour le latin de base
  • UTF-8 intègre des mécanismes de détection et de récupération d'erreurs, permettant d'identifier des séquences d'octets UTF-8 complètes et valides
  • Le cluster de graphèmes étendu, ou graphème, est l'unité sur laquelle il faut itérer, et non le point de code
  • Unicode est mis à jour chaque année, et les règles définissant les clusters de graphèmes changent elles aussi chaque année
  • Unicode peut être rendu différemment selon la locale
  • Les paires de substitution d'Unicode sont deux unités UTF-16 utilisées pour encoder un seul point de code Unicode
  • UTF-16 est encore utilisé comme représentation en mémoire dans certains systèmes
  • Les chaînes Unicode doivent être normalisées avant d'être comparées
  • L'article souligne l'importance d'utiliser des bibliothèques Unicode même pour des opérations de base comme strlen, indexOf et substring

3 commentaires

 
kimws 2023-10-04

Dans le cas de "‍♂️".length, Python 3.11 renvoie 1.

 
kimws 2023-10-04

Les emojis s’affichent de manière corrompue dans les commentaires.

 
GN⁺ 2023-10-03
Commentaires Hacker News
  • Cet article aborde la complexité d’Unicode et la manière de l’utiliser dans le développement logiciel.
  • Un commentateur n’est pas d’accord avec l’affirmation de l’article selon laquelle les « grappes de graphèmes étendues » constituent la meilleure façon de penser les caractères en Unicode, et soutient que la définition d’un « caractère » peut varier selon l’usage prévu.
  • Le commentateur propose que la répétition de chaînes repose sur les points de code, qui sont le niveau fondamental de fonctionnement d’Unicode.
  • Un autre commentateur fait l’éloge de l’article et répond à la question de l’auteur sur la raison pour laquelle la ligature « fi » possède son propre point de code, en expliquant que cela est dû au principe de compatibilité de préservation des formes héritées d’Unicode.
  • Un commentateur se plaint de voir plusieurs pointeurs de souris à l’écran pendant la lecture de la page.
  • Un autre commentateur discute de la difficulté de configurer la locale d’un ordinateur lorsqu’un utilisateur peut lire et écrire plusieurs langues, et critique Linux pour son manque d’options de personnalisation par rapport à Windows.
  • Un commentateur partage une expérience où il a rencontré des problèmes pour assainir les entrées utilisateur destinées à des systèmes tiers, en raison de la manière dont les caractères accentués sont traités.
  • Un autre commentateur conteste l’affirmation de l’article selon laquelle les points de code ne sont pas la meilleure unité de travail, en soutenant qu’il existe de nombreuses situations où l’on travaille justement au niveau des points de code.
  • Un commentateur critique l’exemple de l’article sur la manière dont « é » est encodé en Unicode, affirmant qu’il est trompeur et ne représente pas la façon dont les caractères sont généralement encodés.
  • Un autre commentateur évoque le problème de l’attribution des mêmes points de code aux logogrammes chinois, japonais et coréens, ce qui entraîne un mauvais rendu des noms de fichiers chinois dans Windows lorsque la locale du système n’est pas le chinois.
  • Un commentateur est déconcerté et agacé par l’effet de curseur de souris présent sur la page.