2013-04-16 28 views
23

nie wiem Ruby, ale chcesz uruchomić skrypt, gdzie:Ruby 2.0 iconv wymiana

D: /Heather/Ruby/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb: 45: w `wymagają ': nie można załadować taki plik - iconv (LoadError)

działa jakoś gdybym komentować kod iconv ale to będzie dużo lepiej, jeśli mogę przekodować ten fragment:

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

bez iconv . Może w jakiś sposób mogę użyć tutaj String#encode?

+0

co próbujesz zrobić? jeśli to poznamy, możemy zaproponować ci. –

+0

uruchom ten skrypt: https://github.com/purcell/darcs-to-git/blob/master/darcs-to-git (linia 157 - użycie iconv) – Cynede

Odpowiedz

36

Iconv został uznany za przestarzały (usunięty) w wersji 1.9.3. Nadal można zainstalować.

Materiał referencyjny, jeśli niepewny: https://rvm.io/packages/iconv/

Jednak sugestia, że ​​nie jest i raczej nie używać:

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

API

+12

"wycofany (usunięty)" - lol, te dwa słowa mają zupełnie inne znaczenie. – Trejkaz

8

Jeśli nie jesteś na Ruby 2.1, więc nie można użyć String#scrub następnie dodaje zignoruje wszystkie części łańcucha, które nie są poprawnie kodowanie UTF-8.

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

Sposób kodowania robi prawie dokładnie to, co chcesz, ale z zastrzeżeniem, że kodowanie nie robi nic, jeśli uważa, że ​​łańcuch jest już UTF-8. Więc musisz zmienić kodowanie, przechodząc przez kodowanie, które może nadal kodować pełny zestaw znaków Unicode, które koder UTF-8 może kodować. (Jeśli tego nie zrobisz, zepsujesz wszystkie znaki, które nie są w tym kodowaniu - 7-bitowy ASCII byłby naprawdę złym wyborem!)

0

Nie miałem szczęścia z różnymi podejściami, używając jednoliniowego string.encode samo w sobie

Ale napisałem zasypkę, która implementuje szorowanie ciągu # w MRI w wersji 2.1 lub inne rubiny, które go nie mają.

https://github.com/jrochkind/scrub_rb