Pour un jeu donné, un point de code désigne le code numérique associé à un "caractère". Ainsi, par exemple, le caractère € est codé par 0xA4 (valeur hexadécimale) par le jeu ISO-8859-15 mais 0x80 par le jeu CP1252 (le jeu ANSI de windows).
Un jeu de caractères définit :
La plupart des jeux sont finis et limités. Une majorité des jeux, notamment, n'utilisent, donc ne codent leurs points, que sur un seul octet soit au plus 256 caractères possibles.
Unicode est différent, son but étant de tout représenter, il est défini sur un espace très large tel que [0;0x10FFFF], ce qui peut nécessiter jusqu'à 4 octets (en réalité c'est 21 bits arrondis au-dessus).
Dans le cas d'Unicode, qui est bien le nom du jeu de caractères, il existe plusieurs manières standard d'écrire un point de code. Il s'agit des formes, ô combien connues, UTF-8, UTF-16, UTF-32. L'information, le point de code, va être écrite différemment (sa représentation en mémoire) mais désigne toujours la même chose.
Chaque représentation a ses avantages et inconvénients : l'UTF-8 sollicitera plus le processeur mais la consommation mémoire est normalement (suivant le contenu de la chaîne - européens) bien moindre. À l'inverse, l'UTF-32 ne demandera pas de calculs du processeur pour relire le point de code mais sera bien plus gourmand en mémoire. UTF-16, de manière générale, est un bon compromis entre les deux. Autre avantage en faveur de l'UTF-8, c'est une certaine compatibilité, les points de code communs avec l'ASCII non-étendu sont codés de la même manière.
<?php function slugify(/*UTF-8*/$string) { return trim(transliterator_create_from_rules("::Latin; ::Lower; ::Latin-ASCII; ([^a-z0-9])+ > \-")->transliterate($string), '-'); }
import re import unidecode # http://pypi.python.org/pypi/Unidecode/ def slugify(str): # avec type(str) = 'unicode' return re.sub(r'\W+', '-', unidecode.unidecode(str).lower()).strip('-')
Tests :
Chaîne de départ | Résultat obtenu |
---|---|
キャンパス | kyanpasu |
Αλφαβητικός Κατάλογος | alphabetikos-katalogos |
éloïse (NFC comme NFD) | eloise |