Créé 2011-10-14 20:36:00
Mise à jour 2023-11-22 15:29:09
Vim ou vi en session Linux Debian Lenny est configuré en natif en caractères ISO-Latin1. Jusqu'à aujourd'hui, les OS unix en général et aussi les programmes de console tels que MsDos, MySQL client natif (mysql.exe) ne sont pas encore intrinsèquement en Unicode. Il n'est pas facile de visualiser les textes UTF-8 pour les fichiers multi-octet tels les écrits chinois.
Les webmasters gèrent leur serveur Linux debian à distance à travers une session SSH par PuTTY à partir du système Windows 7 par exemple.
Or il n'est pas nécessaire d'avoir un Windows Chinois pour afficher les idéogrammes, nous pouvons le faire sous Windows Occidental.
En vim dans la session SSH, afin de visualiser les fichiers encodés en charset=UTF-8, qu'il s'agit du texte Chinois Simplifié ou de l'Arabe, il faut configurer aux deux bouts: Linux et Windows Seven.
Il faut installer les locales UTF8, les polices de caractères Chinois et modifier ~/.vmimrc.
# dpkg-reconfigure locales.
en_US ISO-8859-1
zh_CN GB2312
zh_CN.GBK GBK
zh_CN.UTF-8 UTF-8
ttf-arphic-gbsn00lp (AR PL SungtiL GB)
ttf-arphic-gkai00mp (AR PL KaitiM GB)
ttf-arphic-bsmi00lp (AR PL Mingti2L Big5)
ttf-arphic-bkai00mp (AR PL KaitiM Big5)
# apt-get install ttf-arphic-bkai00mp ttf-arphic-bsmi00lp ttf-arphic-gbsn00lp ttf-arphic-gbsn00lp. Ce qui aboutira à des fichiers bkai00mp.ttf bsmi00lp.ttf gbsn00lp.ttf dans le répertoire /usr/share/fonts/truetype/arphic, elles sont suffisantes pour afficher les caractères chinois simplifiés.
"...
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set encoding=utf-8
"...
# vi utf8sample.txtvoici le texte chinois: Nous voyons qu'il y a encore quelque chose qui bloque, les idéogrammes en Unicode envoyés par SSH Linux sont affichés par Windows on ASCII Latin-1.
Windows moderne est par défaut conforme à la norme UTF-8, il n'y a rien à faire sur les Locales sous Windows. Même pas pour les polices de caractères, car une police UTF-8 est installée par défaut: Arial sous Windows Microsoft. La police de caractère Arial peut faire l'affaire, bien qu'elle ne soit pas idéale, car elle n'est pas d'un pitch constant dans la largeur de chaque alphabet, ce qui n'est pas génial pour le codage en programmation, en Anglais, en Français par exemple. Mais pour un premier pas, elle suffira.
Maintenant vous êtes connecté sur votre machine à distance Linux.
# printf "\xc3\xa9\n"Il affiche é dans sur le terminal Unocode. Sous un terminal Latin-1, il donnerait é.
# localeLa LANG n'est pas prédéfinie, donc par défaut.
# vi utf8sample.txtvoici le texte chinois si désiré: Un autre fichier de test utf8bomsample.txt en UTF-8 avec BOM (Byte Order Mark) donnera le même résultat d'affichage. Ne vous inquiétez pas sur l'indication du format de fichier dos, car le texte chinois a été saisi en Windows par NJStar et sauvé dans le PC local.
L'ordre des travaux n'a pas d'importance. Vous pouvez débuter soit par le côté Linux, soit par le Côté Windows 7. Par ailleurs, pour simplement afficher du texte en idéogrammes chinois en vim, vous n'avez pas à définir vous-même la locale, le génial Linux s'en charge.
Si vous voulez que l'interface de vim est aussi en Chinois, il faut alors définir la locale via la variable Shell $LANG parmi les possibilités suivantes:
zh_CN | GB2312 |
zh_CN.GBK | GBK |
zh_CN.UTF-8 | UTF-8 |
Attention, dans chaque locale sépérée par un espace, il n'y a que la première partie qui est le nom valable des locales, par exemple une bonne déclaration:
# export LANG="zh_CN.UTF-8"
Avec cette configuration, l'interface de SHELL est aussi en langue zh_CN.UTF-8, qui affichera les messages système en texte chinois. Voici quelques commandes de test exécutées et les résultats affichés:
# date # df # ls nonexistent.file.
Cette démarche est aussi valable pour le client natif de MySQL /usr/bin/mysql. Pour afficher le contenu stocké en Chinois Simplifié dans une table, vous invoquez mysql par
# mysql --default-character-set=utf8 -u<unsername> -p<password> <your_dbname>Ou bien vous invoquez mysql sans l'option --default-character-set, puis sous la console MySQL, faire une requête spéciale de définition
mysql> SET NAMES 'utf8' COLLATE utf8_general_ci;. Et puis sous la console MySQL, faire une requête comme
mysql> SELECT NameCn FROM products WHERE (ID=358);. Les caractères chinois s'afficherons dans le résultat.
Il n'est pas possible d'afficher le Chinois en UTF-8 dans le client natif de MySQL mysql.exe, car il est lancé que par le Shell, ici cmd32.exe ou MS-DOS. MS-DOS n'accepte pas les polices UTF-8 asiatiques pour son terminal, que ce soit FangSong, SimSun... MySQL est donc limité par les polices de Ms-DOS approuvées par Microsoft: Raster Terminal, TrueType Lucida Console, Consolas qui ne comportent aucun idéogramme chinois. Même si l'on modifie dans le registre Windows, aucun effet positif ne se produit pour les fontes chinoises. Et en changeant de Code Page en Unicode: Après tout cet acharnement, dans la console MySQL, les idéogrammes s'affichent tout de même en Carré Creux. Cela veut dire que la police de caractères est bien en Unicode, qui prend en charge les codages des caractères chinois, mais dans laquelle les glyphes, ici les idéogrammes ne sont pas dessinés par le créateur de la police chargée. Pour afficher le contenu stocké en Chinois Simplifié dans une table, vous deveriez utiliser Outils Graphique d'Aministration de MySQL qui est FreeWare MySQL GUI Administrator Tools. Ou par PHPMyAdmin dans votre Navigateur.