модуль ActiveSupport::Multibyte::Unicode
Константы
- NORMALIZATION_FORMS
-
Список всех доступных форм нормализации. Подробнее см. www.unicode.org/reports/tr15/tr15-29.html.
- UNICODE_VERSION
-
Версия Unicode, поддерживаемая реализацией.
Атрибуты
По умолчанию используемая форма нормализации для операций, требующих нормализации. Может быть установлена в любую из форм в NORMALIZATION_FORMS.
ActiveSupport::Multibyte::Unicode.default_normalization_form = :c
Публичные методы экземпляров
# File activesupport/lib/active_support/multibyte/unicode.rb, line 67
def compose(codepoints)
codepoints.pack("U*").unicode_normalize(:nfc).codepoints
end Преобразует разложенные символы в составную форму.
# File activesupport/lib/active_support/multibyte/unicode.rb, line 58
def decompose(type, codepoints)
if type == :compatibility
codepoints.pack("U*").unicode_normalize(:nfkd).codepoints
else
codepoints.pack("U*").unicode_normalize(:nfd).codepoints
end
end Преобразует составные символы в разложенную форму.
# File activesupport/lib/active_support/multibyte/unicode.rb, line 118
def normalize(string, form = nil)
form ||= @default_normalization_form
# See https://www.unicode.org/reports/tr15, Table 1
if alias_form = NORMALIZATION_FORM_ALIASES[form]
ActiveSupport::Deprecation.warn(<<-MSG.squish)
ActiveSupport::Multibyte::Unicode#normalize is deprecated and will be
removed from Rails 6.1. Use String#unicode_normalize(:#{alias_form}) instead.
MSG
string.unicode_normalize(alias_form)
else
ActiveSupport::Deprecation.warn(<<-MSG.squish)
ActiveSupport::Multibyte::Unicode#normalize is deprecated and will be
removed from Rails 6.1. Use String#unicode_normalize instead.
MSG
raise ArgumentError, "#{form} is not a valid normalization variant", caller
end
end Возвращает нормализацию KC строки по умолчанию. NFKC считается лучшей формой нормализации для передачи строк в базы данных и валидации.
-
string- Строка, над которой необходимо выполнить нормализацию. -
form- Форма нормализации. Должна быть одной из следующих::c,:kc,:d, или:kd. По умолчанию #default_normalization_form.
# File activesupport/lib/active_support/multibyte/unicode.rb, line 48
def pack_graphemes(unpacked)
ActiveSupport::Deprecation.warn(<<-MSG.squish)
ActiveSupport::Multibyte::Unicode#pack_graphemes is deprecated and will be
removed from Rails 6.1. Use array.flatten.pack("U*") instead.
MSG
unpacked.flatten.pack("U*")
end Обратная операция к unpack_graphemes.
Unicode.pack_graphemes(Unicode.unpack_graphemes('क्षि')) # => 'क्षि'
# File activesupport/lib/active_support/multibyte/unicode.rb, line 78
def tidy_bytes(string, force = false)
return string if string.empty?
return recode_windows1252_chars(string) if force
string.scrub { |bad| recode_windows1252_chars(bad) }
end Заменяет все символы ISO-8859-1 или CP1252 их UTF-8 эквивалентами, что приводит к получению валидной UTF-8 строки.
Передача true принудительно приведет к нормализации всех байтов, предполагая, что кодировка строки полностью CP1252 или ISO-8859-1.
# File activesupport/lib/active_support/multibyte/unicode.rb, line 36
def unpack_graphemes(string)
ActiveSupport::Deprecation.warn(<<-MSG.squish)
ActiveSupport::Multibyte::Unicode#unpack_graphemes is deprecated and will be
removed from Rails 6.1. Use string.scan(/\X/).map(&:codepoints) instead.
MSG
string.scan(/\X/).map(&:codepoints)
end Распаковывает строку по границам графем. Возвращает список списков символов.
Unicode.unpack_graphemes('क्षि') # => [[2325, 2381], [2359], [2367]]
Unicode.unpack_graphemes('Café') # => [[67], [97], [102], [233]]
© 2004–2019 David Heinemeier Hansson
Licensed under the MIT License.