Установка iconv для Ruby 1.9.2

// Май 26th, 2011 // Ruby, RVM

Для того, чтобы работать с юниксовой библиоеткой iconv, необходимо добавить её поддержку в Ruby. Оказывается, это не так тривиально. iconv — утилита UNIX (и одноимённая библиотека) для преобразования текста из одной кодировки в другую. Она также портирована под Windows. Утилита iconv конвертирует текст из одной кодировки в другую. Входная кодировка задаётся ключом -f, а выходная — ключом -t. Однако мы будем использовать библиотеку iconv не через вызов консольной команды, а через сам Ruby.Для этого нам придётся удалить Ruby, и скомпилировать его с поддержкой Iconv.

$ rvmsudo rvm package install iconv
$ rvmsudo rvm package install readline
$ rvmsudo rvm remove 1.9.2
$ rvmsudo rvm install 1.9.2 -C --with-iconv-dir=/usr/local/rvm/usr

Сам гем ставить не надо, в Gemfile прописывать зависимости тоже! Не делать это:

$ rvmsudo gem install iconv

т.к. мы уже вкомпилили iconv в Ruby.

Для ипользования iconv необходимо подключить его стандартным образом:

require 'iconv'

Проверяем в irb:

$ irb
ruby-1.9.2-p180 :001 > require 'iconv'
=> true
ruby-1.9.2-p180 :002 > puts Iconv.methods
open
iconv
conv
list
ctlmethods
charset_map
allocate
new
superclass
freeze
===
==
<=>
<
<= >
>=
to_s
included_modules
include?
name
ancestors
instance_methods
public_instance_methods
protected_instance_methods
private_instance_methods
constants
const_get
const_set
const_defined?
const_missing
class_variables
remove_class_variable
class_variable_get
class_variable_set
class_variable_defined?
module_exec
class_exec
module_eval
class_eval
method_defined?
public_method_defined?
private_method_defined?
protected_method_defined?
public_class_method
private_class_method
autoload
autoload?
instance_method
public_instance_method
nil?
=~
!~
eql?
hash
class
singleton_class
clone
dup
initialize_dup
initialize_clone
taint
tainted?
untaint
untrust
untrusted?
trust
frozen?
inspect
methods
singleton_methods
protected_methods
private_methods
public_methods
instance_variables
instance_variable_get
instance_variable_set
instance_variable_defined?
instance_of?
kind_of?
is_a?
tap
send
public_send
respond_to?
respond_to_missing?
extend
display
method
public_method
define_singleton_method
__id__
object_id
to_enum
enum_for
equal?
!
!=
instance_eval
instance_exec
__send__
 => nil
Share

Спасибо!


Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:


6 Responses to “Установка iconv для Ruby 1.9.2”

  1. Andrew:

    А как же String#encode в 1.9.2? Или String.mb_chars в ActiveSupport 3.0?

    • google.com Андрей Токарчук:

      String#encode возвращала мне Encoding::InvalidByteSequenceError а насчёт String.mb_chars не понял, в доке написано «This method has no description. You can help the Ruby on Rails community by adding new notes.». Что она делает, и как ей можно перекодировать строку. Хочу заметить, что мне нужно было не просто перекодировать строку, а сделать свертку. Т.е. есть символы в UTF, которых нет в ASCII (русские например), и мне надо было заменить их теми, котоыре есть. А это вовсе не тоже самое, что перевести английский текст из UTF в ASCI. Если есть другой способ, буду признателен, если вы его опишите здесь.

  2. abonec:

    А почему не указываешь —with-readline-dir при компиляции?

    • google.com Андрей Токарчук:

      А он и так ставится :-)

      • abonec:

        А по какому принципу вообще указываются параметры для пакетов? В документации написано, что нужен этот параметр. И почему тогда iconv нельзя было так же опустить?

        • google.com Андрей Токарчук:

          Потому, что руби надо скомпилить вместе с iconv, а вот readline по-моему можно вообще не ставить. Я его на всякий случай написал. Потом выяснилось, что iconv именно как package надо ставит, а не как gem. У вас Iconv.methods показывает методы iconv и convert, до прохождения алгоритма из статьи?

Комментировать