Есть ли лучшая альтернатива этому?
name.gsub('è','e').gsub('à','a').gsub('ò','o').gsub('ì','i').gsub('ù','u')
спасибо
Использование tr .
Может быть, как string.tr('èàòìù', 'eaoiu').
string.tr('èàòìù', 'eaoiu')
Если вам действительно нужно полное решение, попробуйте извлечь таблицы из модуля Unidecode Perl . После перевода этих таблиц в Ruby вы захотите перебрать каждый символ ввода, подставив значение таблицы для этого символа.
substitutes = {'è'=>'e', 'à'=>'a', 'ò'=>'o', 'ì'=>'i', 'ù'=>'u'} substitutes.each do |old, new| name.gsub!(old, new) end
Или вы можете использовать расширение String, такое как , чтобы сделать это за вас.
Если вариант JRuby, см. Ответ на мой вопрос:
Как обнаружить символы Юникода в строке Java?
Имеется в виду удаление акцентов с букв с помощью нормализатора. Вы можете получить доступ к этому классу из JRuby.
В случае, если вам интересны технические термины для того, что вы хотите сделать, это сворачивание регистра и, возможно, нормализация Unicode (а иногда и сопоставление).
Вот конфигурация сворачивания кейсов для ThinkingSphinx , чтобы дать вам представление о том, сколько символов вам нужно беспокоиться.
Делая дикий удар в темноте, но если вы пытаетесь удалить акцентированные символы, потому что вы используете устаревший формат кодирования текста, вы должны посмотреть на Iconv.
Iconv
Вступительное замечание по теме: http://blog.grayproductions.net/articles/encoding_conversion_with_iconv