我不知道Ruby,但想要运行一个脚本:
D:/ Heather/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]
没有iconv
。也许我可以在某处使用String#encode
?
答案 0 :(得分:38)
在1.9.3中不推荐使用Iconv(已删除)。 你仍然可以安装它。
参考资料如果您不确定: https://rvm.io/packages/iconv/
然而,建议您不要而是使用:
string.encode("UTF-8", :invalid => :replace, :undef => :replace, :replace => "?")
答案 1 :(得分:9)
String#scrub 。
str.scrub(''),
str.scrub{ |bytes| '' }
相关问题:Equivalent of Iconv.conv(“UTF-8//IGNORE”,…) in Ruby 1.9.X?
答案 2 :(得分:8)
如果您不使用Ruby 2.1,那么不能使用String#scrub
,那么以下内容将忽略不正确UTF-8编码的字符串的所有部分。
string.encode('UTF-16', :invalid => :replace, :replace => '').encode('UTF-8')
编码方法几乎完全符合您的要求,但是如果认为字符串已经是UTF-8,则编码不会做任何事情。因此,您需要更改编码,通过仍然可以编码UTF-8可以编码的全套unicode字符的编码。 (如果你不这样做,你会破坏任何不在那种编码中的字符 - 7位ASCII将是一个非常糟糕的选择!)
答案 3 :(得分:0)
我没有幸运使用单行string.encode本身的各种方法
但是我写了一个在MRI pre 2.1中实现String#scrub的回填,或其他没有它的红宝石。