Волей судеб так сложилось, что я работаю под windows и основным моим IDE являеться FAR :-)
Кому-то это может показаться довольно аскетично. Но поднимать IDE типа NetBeans или Eclipse для написания скриптовых утилит я считаю нерациональным решением.
На днях мне понадобилось конвертировать данные n-го количество файлов в кодировке Win1251 в нижний регистр.
Как известно методы работы с регистром для неанглийских языков в Ruby нереализованны(по крайне мере так говорят книги). Связываться с кодировкой utf-8 так же не хотелось, так как встроенный редактор FAR ее просто не поддерживает, без дополнительніх плагинов. Скорость работы скриптов мне тоже была не критична, так что задача была решена следующим способом:
# Устанавливаем кодировку UTF-8
$KCODE = "UTF8"
# Задействуем библиотеку activesupport, чтобы получить доступ к
# Модулю мультибайт Multibyte (Юлий Тарханову),
# который добавит к строкам метод chars (<прокси> для операций над utf-8-символами)
require 'activesupport'
# Добавим библиотеку iconv для поддержки конвертации строк из одной кодировки
# в другую и добавим несколько вспомогательных методов, имена которых говорят
# сами за себя
require 'iconv'
class String
def win1251_to_utf8
Iconv.new("UTF-8", "WINDOWS-1251").iconv self.to_s
end
def utf8_to_win1251
Iconv.new("WINDOWS-1251", "UTF-8").iconv self.to_s
end
def downcase_win1251
self.to_s.win1251_to_utf8.chars.downcase.utf8_to_win1251
end
end
puts "ПРИВЕТ МИР".downcase_win1251 # привет мир
puts "прЮвет мИр".win1251_to_utf8.chars.upcase.utf8_to_win1251 # ПРЮВЕТ МИР
puts "прЮвет мИр".win1251_to_utf8.chars.capitalize.utf8_to_win1251 # Прювет мир
Наверное возможны более компактные варианты, но на данном этапе такое решение задачи меня удовлетворило :-)