Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Il n'existe pas de « caractères spéciaux »

Première rédaction de cet article le 6 janvier 2011


Ceci est un billet d'humeur. Si vous n'aimez pas les billets d'humeur, ou bien si vous trouvez qu'ils sont un moyen facile de remplir son blog à peu de frais, passez à l'entrée suivante dans votre flux de syndication. La raison de ce billet est qu'une recherche sur Google des termes « caractères spéciaux » donne pour moi 201 000 résultats, presque tous utilisant cette expression à tort. Or, il n'y a pas de caractères spéciaux. Tous les caractères Unicode sont égaux !

Un exemple parmi ces 201 000, un article d'une revue de bonne qualité, consacré à une bogue informatique amusante et qui explique « l’iPhone aurait du mal à gérer les caractères spéciaux, type “ç” ou “ê” insérés dans les SMS ». Mais ces caractères n'ont rien de spécial ! Ce sont des caractères Unicode comme les autres, et, dans un article en français, le ç n'a rien de plus spécial que le c ! Les ignorants emploient en général ce terme de « caractères spéciaux » pour parler de ceux qui ne sont pas dans US-ASCII. Mais c'est un provincialisme très étroit : même pour les langues utilisant l'alphabet latin, la quasi-totalité d'entre-elles utilisent des caractères qui ne sont pas dans US-ASCII et ne sont pas spéciaux pour autant.

En Europe, je crois que seuls l'anglais, le frison et le néerlandais peuvent s'écrire avec uniquement ASCII. Et encore : en anglais, des mots comme résumé (à ne pas confondre avec le verbe resume, qui n'a pas le même sens, c'est pour cela que les accents sont importants) nécessitent aussi ces caractères injustement qualifiés de spéciaux. De même, en néerlandais, on a des noms propres avec accent (comme België), certains utilisent la ligature ij (U+0133) ou bien on trouve un accent dans le numéral 1. (Autres exemples sur Wikipédia.)

Donc, je le répète, tous les caractères Unicode sont égaux : ils ont tous un point de code (un nombre, comme U+00E7 pour ç, U+0063 pour c, U+00E9 pour é ou U+0178 pour Ÿ) et un nom. (Seule exception, dans le monde Unicode, l'encodage UCS-2, qui ne traite pas les points de code supérieux à 65535, pourtant la majorité des caractères Unicode. Il ne devrait donc jamais être employé. UTF-16, lui, traite d'une manière... spéciale, ces caractères mais, au moins, il permet de les représenter. Mauvais encodage, toutefois.)

Les seuls caractères qu'on peut légitimement appeler « caractères spéciaux » sont ceux qui nécessitent un échappement dans le langage qu'on utilise. Ainsi, il est normal de dire « \ est un caractère spécial dans les chaînes de caractères en C » ou bien « & est un caractère spécial en XML » et de rappeler aux programmeurs qu'ils doivent faire attention en les manipulant. Mais c'est tout.

Une note au passage sur les SMS, qui étaient cités dans l'exemple que je donnais : la question de l'Unicode dans SMS est complexe et, dans ce cas précis, certains caractères sont en effet spéciaux et traités différemment. Mais la très grande majorité des 201 000 autres exemples ne concernent pas cette technologie archaïque.

Merci à Alix Guillard, Marco Davids, Patrick Vande Walle, André Sintzoff et Rafaël Garcia-Suarez pour leurs commentaires érudits sur le néerlandais.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)