web-dev-qa-db-ja.com

Ruby 2.0 iconvの置き換え

Rubyはわかりませんが、次の場所でスクリプトを実行したいと思います。

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を使用できますか?

25
cnd

Iconvは1.9.3で廃止(削除)されました。まだインストールできます。

不明な場合の参考資料: https://rvm.io/packages/iconv/

ただし、次のことは行わず、使用することをお勧めします。

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

[〜#〜] api [〜#〜]

39
Dane Balia

String#scrubは、Ruby 2.1。

str.scrub(''),
str.scrub{ |bytes| '' }

関連質問: Iconv.conv(“ UTF-8 // IGNORE”、…と同等)in Ruby 1.9.X?

9
masakielastic

Ruby 2.1を使用していないため、String#scrubを使用できない場合、以下は、UTF-8で正しくエンコードされていない文字列のすべての部分を無視します。

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

エンコードメソッドはほぼ正確に望みどおりの動作をしますが、文字列がすでにUTF-8であると考えた場合、エンコードは何もしません。したがって、UTF-8でエンコードできるUnicode文字の完全なセットをエンコードできるエンコードを経由して、エンコードを変更する必要があります。 (そうしないと、そのエンコーディングに含まれていない文字が破損します-7ビットASCIIは本当に悪い選択です!)

8
David Waller

私は1行のstring.encodeを単独で使用するさまざまなアプローチに成功していません

しかし、私はMRI 2.1以前のString#scrubを実装するバックフィル、またはそれを持たない他のルビーを書きました。

https://github.com/jrochkind/scrub_rb

0
jrochkind