Ruby On Rails in UA Icon_home Главная Add to bookmarks Translate translate Profile Войти
Регистрация Форум Блоги Пользователи Ресурсы Список джемов      Поиск   
Arrow_leftНазад в блог

Методы работы с регистром в кириличных кодировках

Date2008-06-03 UserRoman V. Babenko Commentкоментарии 0

Волей судеб так сложилось, что я работаю под 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 # Прювет мир

Наверное возможны более компактные варианты, но на данном этапе такое решение задачи меня удовлетворило :-)

Tag_blue
0 коментариев
Новый коментарий
зарегистрируйтесь для добавления сообщений
используй формат RedCloth
Ключевые слова:
Гости: 207 Онлайн: Евгений Хлобыстин,
Rambler's Top100
О проекте по всем вопросам обращайтесь на support
Rubyclub.com.ua Copyright © 2007 - 2008