Сортировка UTF-8 представляет в виде строки в RoR

Используя MSVC, я думаю, что оператор выполнил бы то, что, скорее всего, предполагалось, то есть: очистить все, кроме наименее значимых 16 битов значения, но я встречал другие платформы, которые интерпретировали бы литерал 0xffff как эквивалентный (short) -1, затем знак расширяется для преобразования в long, и в этом случае выражение «значение & amp; = 0xFFFF» не будет иметь никакого эффекта. «значение & amp; = 0x0FFFF» является более явным и надежным.

15
задан Daniel Vandersluis 8 July 2009 в 13:58
поделиться

4 ответа

http://github.com/grosser/sort_alphabetical

Этот гем должен помочь. Он добавляет методы sort_alphabetical и sort_alphabetical_by в Enumberable.

8
ответ дан 1 December 2019 в 03:24
поделиться

Есть несколько способов. Вы можете преобразовать строки UTF в шестнадцатеричные и затем отсортировать их:

s.split(//).collect { |x| x.unpack('U').to_s }.join

или вы можете использовать библиотеку iconv. Прочтите его и используйте по мере необходимости (из dzone):

#add this to environment.rb
#call to_iso on any UTF8 string to get a ISO string back
#example : "Cédez le passage aux français".to_iso

class String
  require 'iconv' #this line is not needed in rails !
  def to_iso
    Iconv.conv('ISO-8859-1', 'utf-8', self)
  end
end
1
ответ дан 1 December 2019 в 03:24
поделиться

Пытались ли вы использовать метод mb_chars для каждой строки вашей страны? mb_chars - это добавляемый ActiveSupport прокси-сервер, который определяет безопасные для Unicode версии всех методов String . Если компаратор поддерживает Unicode, тогда сортировка должна работать правильно.

-2
ответ дан 1 December 2019 в 03:24
поделиться

То, что вы пытаетесь сделать, является очень запутанным предложением. Невозможно сделать прозрачную транслитерацию для всех символов Unicode, потому что значение диграфов меняется от языкового стандарта к языку, а строки могут становиться ОГРОМНЫМИ (если, скажем, вы заменяете 10 китайских символов их фонетическими эквивалентами). Не ходите туда.

Зачем вам вообще нужны транслитерированные имена? Для URL-адресов? Браузеры теперь прилично обрабатывают URL-адреса Unicode, поэтому вы изобретаете огромную проблему из воздуха. Если вам нужны идентификаторы, предварительно обработайте свои списки, чтобы включить в них стабильный числовой идентификатор для каждой страны, и используйте его в качестве идентификатора. Или сохраните английское название страны в качестве идентификатора (вы можете бесплатно загрузить списки стран ISO с учетом локали).

Если вам действительно нужна хорошая транслитерация для Unicode (а это не то, что вам нужно в данном случае), см. IBM Библиотеки ICU,

0
ответ дан 1 December 2019 в 03:24
поделиться
Другие вопросы по тегам:

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