@redduckrobot

Как отсортировать с украиское подмножество символов кириллицы в Django + SQLite?

Здравствуйте, столкнулся с проблемой сортировки украинских символов, в частности имени начинающегося с буквы "І" (украинская "И"). Этот символ после сортировки оказывается на первом месте (или в конце, в зависимости от направления сортировки). Базу могу использовать только SQLite.

В Django делаю такой запрос:
Employee.objects.all().order_by('name')

Аналогично на SQL:
SELECT name FROM employee ORDER BY name

Результат один и тот же - сперва идут имена начинающиеся на "І", а потом все остальное.

Непосредствнно сам Python3 так же отказывается сортировать как нужно (за исключением строчных символов они летят в конец, заглавные в начало).
>>> l = ['А', 'И', 'І', 'і', 'а', 'и', 'ч']
>>> sorted(l)
['І', 'А', 'И', 'а', 'и', 'ч', 'і']
>>>


Сталкивался ли кто-то с подобными проблемами? Подскажите, пожалуйста, возможные варианты решений.
  • Вопрос задан
  • 515 просмотров
Решения вопроса 1
@redduckrobot Автор вопроса
Решение нашел, может кому пригодится. Чуть ниже "принятого решения этого топика" stackoverflow, код:
# python2.5 code below
# corpus is our unicode() strings collection as a list
corpus = [u"Art", u"Älg", u"Ved", u"Wasa"]

import locale
# this reads the environment and inits the right locale
locale.setlocale(locale.LC_ALL, "")
# alternatively, (but it's bad to hardcode)
# locale.setlocale(locale.LC_ALL, "sv_SE.UTF-8")

corpus.sort(cmp=locale.strcoll)

# in python2.x, locale.strxfrm is broken and does not work for unicode strings
# in python3.x however:
# corpus.sort(key=locale.strxfrm)


Для Django соответсвенно:
emps = list(Employee.objects.all())
emps.sort(key=lambda x: locale.strxfrm(x.name))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы