iconv将来会被弃用,请改用String#encode

时间:2012-06-15 09:45:28

标签: ruby-on-rails rspec iconv hpricot soap4r

运行rspec时,我在ruby 1.9.3-p125中收到以下弃用警告。但是ruby 1.9.2没有弃用的警告。

/gems/ruby-1.9.3-p125@cs/gems/soap4r-1.5.8/lib/xsd/iconvchars
et.rb:9:in `<top (required)>': iconv will be deprecated in the future, use String#encode instead.
/home/ec2-user/.rvm/gems/ruby-1.9.3-p125@cs/gems/hpricot-0.8.2/lib/hpricot/build
er.rb:2:in `require': /gems/ruby-1.9.3-p125@cs/gems/hpricot-0
.8.2/lib/fast_xs.so: undefined symbol: ruby_digitmap - /gems/
ruby-1.9.3-p125@cs/gems/hpricot-0.8.2/lib/fast_xs.so (LoadError)

这可能是什么原因?有人可以帮忙解决这个问题。

4 个答案:

答案 0 :(得分:7)

有一项建议让ruby 1.9.3将stdlibs移动到gems。作为此转换的一部分,不同字符串编码之间的转码将被“吉隆”,请参阅Wiki(部分:应该对什么stdlib进行创作?)。

因此,每次调用iconv时,都会显示弃用通知,以便通知开发人员ruby的未来版本将不使用lib / iconv并告诉他们(以及在何处)需要对帐户进行代码修改对于这些计划的变更。

目前这不成问题,因为将支持iconv和String #coding,以便让开发人员有时间进行转换。但是你应该记住,如果你不删掉不推荐使用的代码,你的代码将在以后的版本中中断。

快速Google搜索可帮助您进行转换,例如如果需要,“从Iconv#iconv到String #coding”。如果您不打算进行更改,则应远离未来版本,并在更新环境时格外小心。

答案 1 :(得分:3)

日志条目告诉您问题是在soap4r gem中生成的。 看起来宝石暂时没有更新,版本1.5.8是从2007年开始的 所以它也可能与ruby 1.9.3有其他问题。

有一个项目声称有一个ruby-1.9兼容版本: SOAP4R-ruby1.9

还有其他用于ruby的soap库,在这里你可以看到其中的一些: ruby-toolbox search for soap

答案 2 :(得分:3)

你的问题实际上是hpricot,它显然与ruby 1.9.3不兼容,并抛出你在这里看到的“未定义的符号:ruby_digitmap”。这是someone else with the same problem

不幸的是,hpricot is no longer maintained,所以除非有人拿起地幔,否则可能无法修复。你的主要选择似乎是坚持使用ruby 1.9.2,或者找到hpricot的替代品。大多数人似乎都在使用nokogiri进行ruby中的XML和HTML解析,但肯定还有其他选择。

答案 3 :(得分:0)

删除此警告......

转到.rvm目录并找到iconv.c(我的~/.rvm/src/ruby-1.9.3-p125/ext/iconv/iconv.c}

编辑该文件,删除或注释掉warn_deprecated()的呼叫(应该在底部附近)

从该文件的目录中,运行ruby extconf.rb然后make然后make install

应该做的伎俩