Подтвердить что ты не робот

Замена Ruby 2.0 iconv

Я не знаю Ruby, но хочу запустить script где:

D:/Heather/Ruby/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb: 45: in `require ': невозможно загрузить такой файл - iconv (LoadError)

он работает как-то, если я прокомментирую код iconv, но будет намного лучше, если я могу перекодировать эту часть:

return Iconv.iconv('UTF-8//IGNORE', 'UTF-8', (s + ' ') ).first[0..-2]

без iconv. Может быть, я могу как-то использовать String#encode?

4b9b3361

Ответ 1

Iconv был устаревшим (удаленным) в 1.9.3. Вы все еще можете установить его.

Справочный материал, если вы не уверены: https://rvm.io/packages/iconv/

Однако предложение состоит в том, что вы не используете и скорее используете:

string.encode("UTF-8", :invalid => :replace, :undef => :replace, :replace => "?")

API

Ответ 3

Если вы не используете Ruby 2.1, поэтому не можете использовать String#scrub, тогда следующее будет игнорировать все части строки, которые неправильно кодируются UTF-8.

string.encode('UTF-16', :invalid => :replace, :replace => '').encode('UTF-8')

Метод кодирования делает почти то, что вы хотите, но с предостережением, которое кодирует, ничего не делает, если он считает, что строка уже является UTF-8. Поэтому вам нужно изменить кодировку, пройдя через кодировку, которая все еще может кодировать полный набор символов Unicode, которые UTF-8 может кодировать. (Если вы этого не сделаете, вы повредите любые символы, которые не находятся в этой кодировке, - 7-битный ASCII был бы очень плохим выбором!)

Ответ 4

Мне не повезло с различными подходами, используя одну строку string.encode сам по себе

Но я написал обратную засыпку, которая реализует скрап String # в MRI pre 2.1 или другие рубины, которые его не имеют.

https://github.com/jrochkind/scrub_rb