Ruby 2.0 iconv替换

cnd*_*cnd 25 ruby ruby-2.0

我不知道Ruby,但想运行一个脚本,其中:

D:/Hather /Ruby/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:在`require':无法加载这样的文件 - iconv(LoadError)

如果我评论iconv代码它会以某种方式工作,但如果我可以重新编码这部分它将会好得多:

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

没有iconv.也许我可以String#encode在这里用某种方式?

Dan*_*lia 39

Iconv在1.9.3中被弃用(删除).你仍然可以安装它.

参考资料如果您不确定:https: //rvm.io/packages/iconv/

但是建议你不要而是使用:

string.encode("UTF-8", :invalid => :replace, :undef => :replace, :replace => "?")
Run Code Online (Sandbox Code Playgroud)

API

  • "弃用(删除)" - 哈哈,这两个词有完全不同的含义. (13认同)

mas*_*tic 9

从Ruby 2.1开始,可以使用String#scrub.

str.scrub(''),
str.scrub{ |bytes| '' }
Run Code Online (Sandbox Code Playgroud)

相关问题:Ruby 1.9.X中的Iconv.conv("UTF-8 // IGNORE",...)的等价物?


Dav*_*ler 8

如果您不在Ruby 2.1上,那么无法使用,String#scrub则以下将忽略未正确UTF-8编码的字符串的所有部分.

string.encode('UTF-16', :invalid => :replace, :replace => '').encode('UTF-8')
Run Code Online (Sandbox Code Playgroud)

编码方法几乎完全符合你的要求,但是如果认为字符串已经是UTF-8,则编码不会做任何事情.因此,您需要更改编码,通过仍然可以编码UTF-8可以编码的全套unicode字符的编码.(如果你不这样做,你会破坏那些不在那种编码中的字符 - 7bit ASCII将是一个非常糟糕的选择!)