utf8 sous linux et vim

utf8
Voici un tutoriel simple pour utiliser des caractères ou des symboles UTF8 à partir d’une machine GNU/Linux.

Depuis quelques années, l’usage de caractères spéciaux ne pose plus de grand problème sous Linux, cependant comme ces caractères n’apparaissent pas sur les claviers on a tendances à les oublier.

Après une rapide définition de ces caractères, je vous montrerai comment les utiliser facilement dans la plupart des applications et en particulier dans l’éditeur à tout faire : “vim“.

Comme j’en parlai dans un billet précédent l’ordinateur ne peut traiter en réalité que des séries de 0 et 1.  Pour représenter le caractère d’une lettre on a établi des tables de conversion. Ainsi la lettre A est représentée par la série “0100001”. Dans les années 60 un groupe de travail défini la table ASCII où avec 7bits, les 95 caractères suivant sont définis :

 !"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~

Vous remarquez qu’il manque les caractères accentués. Pour les définir il faut utiliser le 8ème bit ce qui permet de coder jusqu’à 191 caractères. Ces 191 caractères permettent de définir les caractères accentués et quelques symboles couramment utilisés en Europe de l’Ouest ou en Amérique mais pas des alphabets grecs, arabes, cyrilliques ou asiatiques. Il faut une table par alphabet et indiquer à chaque fois quelle table est utilisée. La table des caractères utilisées en Europe de l’Ouest ou en Amérique est la table Latin1 (ou ISO-8859-1).
À partir de 1991 la norme unicode va permettre d’utiliser une table unique de 32bits qui défini actuellement jusqu’à 110 000 caractères. Le codage UTF-8 de cette norme permet de rester compatible avec la table ASCII.

Sur les systèmes Linux à base d’interface X-window il suffit d’utiliser les touches Ctrl+Shift+U suivi du code hexadécimale du caractère souhaité : Ctrl+Shift+U+3B1 affiche alors le caractère grec alpha parce que le code de ce caractère est “03b1”. Cela vous permet d’écrire une citation en grec ancien comme dans l’image qui illustre cet article ou d’écrire une formule mathématique.
Ces codes hexadécimaux peuvent être compliqués à retenir. L’éditeur vim permet d’utiliser des mnémoniques (digraphs) pour simplifier l’écriture de ces caractères. Ainsi, en mode insertion, Ctrl+K a* permet d’écrire la lettre grecque alpha, b* béta et ainsi de suite pour tout l’alphabet grec.

Pour que ces caractères s’affichent dans une application du type traitement de texte ou navigateur web, il faut également que la police de caractères (font) utilisée dispose de la représentation de ce caractère. L’image en tête de ce billet utilise sur la première ligne la police Mathematica2 et sur la deuxième Liberation.

Si vous disposez déjà d’un texte en utf8, ouvrez le avec vim puis ‘ga’ en mode commande affichera le code décimal et hexadécimal du caractère sous le curseur. Ainsi sous le caractère ¿  vim affichera Hexa 00bf

Vous pouvez trouver la plupart des digraphs utilisables dans la RFC 1345.

Plus simplement, vous pouvez utiliser le plugin vim “unicode“.
Téléchargez le fichier .vmb, pour l’installer il suffit d’utiliser la commande :

vim -c 'so %' -c 'q' unicode-0.16.vmb

unicode vim plugin
lorsque vous en avez besoin, activez le plugin avec
:EnableUnicodeCompletion

puis vous pouvez rechercher un caractère unicode à partir de sa description exemple
SPADE Ctrl+X+U et Ctrl N ou P
résultat : ♠

ou

ARROW Ctrl+X+U et Ctrl N ou P
résultat possible : ⇒

Le plugin unicode vous fournira également le mnémonique s’il existe, par exemple cS pour ¿

Pour terminer voici quelques caractères qui peuvent vous être régulièrement utiles :

♡ ♥
★ ☆
← →  ⇒
↪ ↪
⌑ ■ □

Cependant n’oubliez pas que ces caractères peuvent encore poser problèmes lors de recherches par des scripts simples ou le comptage de caractères. Même si cela peut sembler évident, évitez également de les utiliser pour des variables de code logiciels, des noms de fichiers ou encore des noms de bases de données ou de tables. Les outils de secours ou certains logiciels n’implémentent pas forcément UTF-8.