Если Вы хотите проверить тип запроса для предотвращения выполнения чего-либо, когда неправильный метод используется, знают, что можно также определить его в routes.rb файле:
map.connect '/posts/:post_id', :controller => 'posts', :action => 'update', :conditions => {:method => :post}
или
map.resources :posts, :conditions => {:method => :post}
метод обновления Вашего PostsController теперь только назовут, когда у Вас эффективно было сообщение. Проверьте документ для ресурсы .
Библиотека IBM ICU делает это (и многое другое). Он имеет привязки Python: PyICU .
Обновление : основное различие в сортировке между ICU и локалью. strcoll
заключается в том, что ICU использует полный алгоритм сортировки Unicode , а strcoll
использует ISO 14651 .
Различия между этими двумя алгоритмами кратко описаны здесь : http://unicode.org/faq/collation.html#13 . Это довольно экзотические частные случаи, которые редко имеют значение на практике.
>>> import icu # pip install PyICU
>>> sorted(['a','b','c','ä'])
['a', 'b', 'c', 'ä']
>>> collator = icu.Collator.createInstance(icu.Locale('de_DE.UTF-8'))
>>> sorted(['a','b','c','ä'], key=collator.getSortKey)
['a', 'ä', 'b', 'c']
Попробуйте алгоритм сортировки Unicode Python Джеймса Таубера . Возможно, это не совсем то, что вам нужно, но, похоже, стоит взглянуть. Для получения дополнительной информации о проблемах см. этот пост Кристофера Ленца.
Джефф Этвуд написал хороший пост на Natural Sort Order , в нем он связался со сценарием, который делает в значительной степени то, что вы просите .
Это ни в коем случае не тривиальный сценарий, но он помогает.
Это далеко не полное решение для вашего варианта использования, но вы можете взглянуть на сценарий unaccent.py от effbot. орг. По сути, он удаляет все акценты из текста. Вы можете использовать этот «очищенный» текст для сортировки по алфавиту. (Для лучшего описания см. эту страницу.)
Для его реализации вам необходимо прочитать об «Алгоритме сортировки Unicode» видеть http://en.wikipedia.org/wiki/Unicode_collation_algorithm
http://www.unicode.org/unicode/reports/tr10/
пример реализации находится здесь
http: // jtauber.com/blog/2006/01/27/python_unicode_collation_algorithm/
Я вижу, что ответы уже сделали отличную работу, просто хотел указать на одну неэффективность кодирования в Human Sort . Чтобы применить выборочный посимвольный перевод к строке юникода s, он использует код:
spec_dict = {'Å':'A', 'Ä':'A'}
def spec_order(s):
return ''.join([spec_dict.get(ch, ch) for ch in s])
Python имеет гораздо лучший, более быстрый и краткий способ выполнения этой вспомогательной задачи (для строк Unicode - аналогичный метод для байтовые строки имеют другую и несколько менее полезную спецификацию! -):
spec_dict = dict((ord(k), spec_dict[k]) for k in spec_dict)
def spec_order(s):
return s.translate(spec_dict)
В слове, который вы передаете методу translate
, в качестве ключей используются порядковые номера Unicode (не строки), поэтому нам нужен этот шаг восстановления из исходный char-to-char spec_dict
. (Значения в dict, который вы передаете для перевода [в отличие от ключей, которые должны быть порядковыми], могут быть порядковыми номерами Unicode, произвольными строками Unicode,
Я не вижу этого в ответах. Мое приложение сортируется по языку с использованием стандартной библиотеки python. Это довольно просто.
# 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)
Вопрос к Леннарту и другим респондентам: никто не знает «локаль» или это не подходит для этой задачи?