Используя MSVC, я думаю, что оператор выполнил бы то, что, скорее всего, предполагалось, то есть: очистить все, кроме наименее значимых 16 битов значения, но я встречал другие платформы, которые интерпретировали бы литерал 0xffff как эквивалентный (short) -1, затем знак расширяется для преобразования в long, и в этом случае выражение «значение & amp; = 0xFFFF» не будет иметь никакого эффекта. «значение & amp; = 0x0FFFF» является более явным и надежным.
http://github.com/grosser/sort_alphabetical
Этот гем должен помочь. Он добавляет методы sort_alphabetical
и sort_alphabetical_by
в Enumberable.
Есть несколько способов. Вы можете преобразовать строки 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
Пытались ли вы использовать метод mb_chars
для каждой строки вашей страны? mb_chars
- это добавляемый ActiveSupport прокси-сервер, который определяет безопасные для Unicode версии всех методов String
. Если компаратор поддерживает Unicode, тогда сортировка должна работать правильно.
То, что вы пытаетесь сделать, является очень запутанным предложением. Невозможно сделать прозрачную транслитерацию для всех символов Unicode, потому что значение диграфов меняется от языкового стандарта к языку, а строки могут становиться ОГРОМНЫМИ (если, скажем, вы заменяете 10 китайских символов их фонетическими эквивалентами). Не ходите туда.
Зачем вам вообще нужны транслитерированные имена? Для URL-адресов? Браузеры теперь прилично обрабатывают URL-адреса Unicode, поэтому вы изобретаете огромную проблему из воздуха. Если вам нужны идентификаторы, предварительно обработайте свои списки, чтобы включить в них стабильный числовой идентификатор для каждой страны, и используйте его в качестве идентификатора. Или сохраните английское название страны в качестве идентификатора (вы можете бесплатно загрузить списки стран ISO с учетом локали).
Если вам действительно нужна хорошая транслитерация для Unicode (а это не то, что вам нужно в данном случае), см. IBM Библиотеки ICU,