Iconv et résultats variables

Arrg, il faut lire les pages de manuel en entier … iconv et toutes les wrapper dérivés sont influencé par les variables d’environnement LANG, LC_ALL, LC_CTYPE, LC_MESSAGES.

Par exemple :

$ echo éà | LANG=fr_FR.UTF-8 iconv -f UTF-8 -t ascii//translit
ea
$ echo éà | LANG=C iconv -f UTF-8 -t ascii//translit
??

Et comme bien sûr iconv est très bien documenté, il va sans dire que ça été facile de trouver cette bizzarie.

Donc comme on dit dans ces cas là, ce n’est pas un bug mais une fonctionnalité, à voir chez debian : ”Libc6: //translit fails with cyrillic and others

Et bien sûr quand vous lancez votre application rails avec Webrick dans votre environnement où LANG=fr_FR.UTF-8

$ locale
LANG=fr_FR.UTF-8
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=

$ script/server

Et d’un autre en lançant via passenger et que LANG est initialisé à “C”, alors on perd son temps à chercher le problème dans rails ou passenger.
RTFM !

J’aurais bien aimé utiliser iconv avec la locale fr_FR, mais comme j’utilise iconv pour mes permaliens (enregistré en BD ce qui n’est pas une bonne idée au passage) qui ont été généré avec sans locale (LANG=C), alors pour éviter les problèmes, je force l’appli à utiliser LANG=C dans mon config/envirronment.rb

...
ENV['LANG'] = 'C'
...

jusqu’au prochain problème …

Ce contenu a été publié dans Configuration, Web Dev, avec comme mot(s)-clé(s) , . Vous pouvez le mettre en favoris avec ce permalien.