J'ai un problème avec le tri des listes en utilisant un classement Unicode sous Python 2.5.1 et 2.6.5 sous OSX, ainsi que sous Linux.Python ne triant pas unicode correctement. Strcoll n'aide pas
import locale
locale.setlocale(locale.LC_ALL, 'pl_PL.UTF-8')
print [i for i in sorted([u'a', u'z', u'ą'], cmp=locale.strcoll)]
qui devrait imprimer:
[u'a', u'ą', u'z']
Mais au lieu imprime sur:
[u'a', u'z', u'ą']
Résumant it up - il semble que strcoll était cassé. Je l'ai essayé avec différents types de variables (par exemple, des chaînes codées non-unicode).
Qu'est-ce que je fais de mal? Cordialement, Tomasz Kopczuk.
Meilleures salutations, Tomasz Kopczuk.
Qu'est-ce que le retour 'de locale.getlocale (LC_COLLATE)' après votre ligne setlocale? – Amber
Le module 'locale' utilise l'API locale de la bibliothèque C, donc s'il y a une erreur il doit être dans la bibliothèque C. Un test équivalent avec les paramètres régionaux 'de_DE.UTF-8' et la chaîne' ä' au lieu de '± fonctionne correctement. Même si j'utilise les paramètres régionaux en allemand avec ''', l'ordre est correct, donc il doit y avoir quelque chose qui ne va pas avec l'implémentation de la locale en polonais dans la bibliothèque C. Comme une solution de contournement vous pouvez convertir la chaîne à la forme de normalisation D en utilisant 'unicodedata.normalize', alors même l'ordre naïf' strcmp' devrait fonctionner. – Philipp
OK, ça m'intéresse aussi. Je l'ai essayé avec 'pl_PL.UTF-8' et' de_DE.UTF-8', et aussi avec 'sort (key = locale.strxfrm)' au lieu d'utiliser 'strcoll' aussi sur OS X et pour le moment j'obtiens votre résultat incorrect. Sting 'ä' avec de_DE.UTF8 n'a pas fonctionné pour moi. – chryss