2013-04-16 6 views
23

Ich weiß Rubin nicht, aber will ein Skript ausgeführt werden soll, wo:Rubin 2.0 iconv Ersatz

D: /Heather/Ruby/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb: 45: in `require ': nicht solche Datei laden kann - iconv (Loaderror)

es funktioniert irgendwie, wenn ich iconv Code kommentieren, aber es wird viel besser sein, wenn ich diesen Teil neu codieren kann:

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

ohne iconv . Vielleicht kann ich hier irgendwie String#encode verwenden?

+0

Was versuchen Sie zu tun? Wenn wir das wissen, können wir Ihnen vorschlagen. –

+0

führen Sie dieses Skript: https://github.com/purcell/darcs-to-git/blob/master/darcs-to-git (Zeile 157 - iconv Verwendung) – Cynede

Antwort

36

Iconv wurde in 1.9.3 veraltet (entfernt). Sie können es immer noch installieren.

Referenzmaterial, wenn Sie sich nicht sicher: https://rvm.io/packages/iconv/

Doch der Vorschlag ist, dass Sie nicht und eher verwenden:

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

API

+12

"veraltet (entfernt)" - lol, diese beiden Wörter haben ganz andere Bedeutungen. – Trejkaz

8

Wenn Sie nicht auf Ruby-2.1, so kann String#scrub nicht verwenden dann die folgenden werden alle Teile der Zeichenfolge ignorieren, die nicht korrekt UTF-8 codiert sind.

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

Das Kodierungsverfahren macht fast genau das, was Sie wollen, aber mit dem Vorbehalt, dass kodieren etwas nicht tun, wenn es die Zeichenfolge denkt, ist bereits UTF-8. Sie müssen also die Kodierungen ändern, indem Sie eine Kodierung verwenden, die immer noch den vollständigen Unicode-Zeichensatz codiert, den UTF-8 kodieren kann. (Wenn Sie nicht, werden Sie alle Zeichen korrumpieren, die nicht in dieser Codierung sind - 7bit ASCII wäre eine wirklich schlechte Wahl!)

0

Ich hatte nicht Glück mit den verschiedenen Ansätzen mit einer Zeile string.encode an sich

Aber ich schrieb eine Hinterfüllung, die String # Scrub in MRI Pre 2.1 oder andere Rubine, die es nicht haben, implementiert.

https://github.com/jrochkind/scrub_rb