【问题标题】:Ruby Iconv works with irb and ruby debugger but not in a unit testRuby Iconv 适用于 irb 和 ruby​​ 调试器,但不适用于单元测试
【发布时间】:2011-03-04 01:16:04
【问题描述】:

我在 Ubuntu 10.04 64 位上运行 Ruby 1.8.7 和 Rails 2.3.5。我编写了一个方法,它应该采用这样的字符串 "École À la Découverte" 并输出这样的文件系统名称 "ecole_a_la_decouverte":

(Iconv.new('US-ASCII//TRANSLIT', 'utf-8').iconv "École À la Découverte").downcase.split.join('_')

当我在我的代码中测试这一行时,测试总是失败,说"cole_la_dcouverte" 不等于"ecole_a_la_decouverte"。奇怪的是,如果我插入调试器行并使用调试器控制台,测试就会通过。同样,在irb./script/console 中手动运行这一行似乎也可以。

有谁知道发生了什么以及为什么这个测试失败了?我唯一的想法是包含调试器或irb 以某种方式增加了对 UTF-8 的更多支持,但我不知道下一步该去哪里。

提前致谢!

【问题讨论】:

  • 它在您的 Rails 控制台中有效吗?在 ./script/console 中尝试
  • 感谢 Rishav 的提示。我尝试运行: (Iconv.new('US-ASCII//TRANSLIT', 'utf-8').iconv "École À la Découverte").downcase.split.join('_') in ./script/console它产生:“ecole_a_la_decouverte”这是我所期望的,所以仍然没有骰子。不过这是个好主意!
  • +1 因为我不知道如何正确实现 Iconv 语法,而您的问题对我有帮助。

标签: ruby-on-rails ruby utf-8 iconv


【解决方案1】:

这似乎是语言环境的问题 - 在 php 中也观察到相同的情况,如果没有设置语言环境(无论语言环境如何),其中(有时?)iconv 函数不起作用。

请参阅a thread on this on ruby-forum.com,其中建议使用低级修复,允许您在 C 中使用 setlocale() 设置区域设置。

另一个建议是安装locale gem

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多