• # Pas toujours

    Posté par . En réponse au journal Rigolons avec l'ascii. Évalué à 10.

    L'ordre des caractères est censé être définit par la locale. Cela peut être important quand on utilise certaines commandes telles que ls ou sort.

    for i in $(locale -a) ; do echo == $i ; printf "a\nA\nz\nZ\n" | LC_ALL=$i sort ; done 
     == C
     A
     Z
     a
     z
     == C.UTF-8
     A
     Z
     a
     z
     == en_US.utf8
     a
     A
     z
     Z
     == fr_FR.utf8
     a
     A
     z
     Z
     == POSIX
     A
     Z
     a
     z

    On voit ici que les locales en_US.utf8 et fr_FR.utf8 n'utilisent pas l'ordre ASCII ou Unicode. J'imagine que pour des raisons de performances Python, comme la plupart des langages, ignore la locale lors des comparaisons de chaînes de caractères (voir aussi locale.strcoll()).

    Remarque: Les utilisateurs des locales UTF-8 qui n'apprécient pas que 'ls' mélange les majuscules et les minuscules peuvent déclarer LC_COLLATE=C.UTF-8 pour revenir à un tri plus 'classique'.