【问题标题】:Dealing with a non-ascii character in Rspec Testing在 Rspec 测试中处理非 ascii 字符
【发布时间】:2012-09-26 07:20:00
【问题描述】:

我正在使用 Ruby 1.9.3 的 DocSplit gem 来创建 Unicode UTF-8 版本的 word 文档。今天令我惊讶的是,当我对其中一个文档的特定部分进行测试时,我开始遇到字符编码不一致的问题。

我尝试了多种不同的方法来解决我将在下面列出的问题,但迄今为止我取得的最大成功是删除了所有非 ASCII 字符。这远非理想,因为我不认为角色在数据库中真的会成为所有问题。

gsub(/[^[:ascii:]]/, "")

这是我的输出与我的预期的示例:

My CODES'S APOSTROPHE

My CODES’S APOSTROPHE

第二个撇号应该看起来是波浪状的。如果将其粘贴到 irb 中,则会得到以下内容:\U+FFE2

我专门为这个角色尝试了正则表达式,它似乎在 Rubular 中工作。然而,一旦我将它放入我的模型中,就会出现语法错误。

syntax error, unexpected $end, expecting ')'
raw_title = raw_title.gsub(/’/, "")

我也尝试将编码强制为 UTF-8,但一切都已经在 UTF-8 中,这似乎没有效果。我尝试将输出强制为 US-ASCII,但出现字节序列错误。

我还尝试了 Ruby 库中的一些编码选项。这些基本上和正则表达式做同样的事情。

这一切都归结为我正在尝试匹配输出以进行测试。我什至应该关心这些特殊字符吗?有没有更好的方法来匹配这些字符而不盲目删除它们?

【问题讨论】:

    标签: ruby-on-rails ruby rspec rspec2


    【解决方案1】:

    尝试添加:

    # encoding: utf-8
    

    在失败的 rspec 文件的顶部。这应该确保以下内容:

    raw_title = raw_title.gsub(/’/, "")
    

    在您的规范工作中。

    【讨论】:

    • 感谢塞巴斯蒂安,成功了!你介意解释一下如何/何时在 Ruby 文件中包含这样的编码吗?
    • 阅读:blog.grayproductions.net/articles/…,这是一篇关于 1.9 编码问题的优秀文章!
    • 感谢您添加的信息!将此编码添加到常规文件是否被认为是不好的做法?我应该只在 rspec 中这样做吗?
    • 不,可以添加到所有文件中;经常处理欧洲语言,我已将编辑器配置为自动为我添加。
    【解决方案2】:

    我尝试使用上面的示例。但即使在那之后它仍然失败。所以我用 iconv 来转换那个特定的字符。这是我用的

    Iconv.conv('ASCII//IGNORE', 'UTF8', text_to_be_converted)
    

    我尝试了以下链接中给出的内容 - How to get rid of non-ascii characters in ruby

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 1970-01-01
      • 2011-06-03
      • 2013-03-22
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 2015-09-25
      相关资源
      最近更新 更多