在Rspec测试中处理非ascii字符

时间:2012-09-26 07:20:00

标签: ruby-on-rails ruby rspec rspec2

我正在使用DocSplit gem for Ruby 1.9.3来创建单词文档的Unicode UTF-8版本。令我惊讶的是,当我在其中一个文档的某个特定部分上运行测试时,我开始遇到字符编码不一致。

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

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

这是我的输出与我期望的相似的示例:

My CODES'S APOSTROPHE

My CODES’S APOSTROPHE

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

我专门针对这个角色尝试了Regexing,它似乎适用于Rubular。然而,只要我把它放在我的模型中,我就会出现语法错误。

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

我也尝试将编码强制为UTF-8,但所有内容都已经使用UTF-8,但这似乎没有效果。我尝试将输出强制为US-ASCII,但是我得到了一个字节序列错误。

我还尝试了一些Ruby库中的编码选项。这些基本上与正则表达式相同。

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

2 个答案:

答案 0 :(得分:4)

尝试添加:

# encoding: utf-8

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

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

在你的规范工作中。

答案 1 :(得分:0)

我尝试使用上面的例子。但即便如此,它仍然失败。所以我使用iconv来转换那个特定的字符。这就是我用过的东西

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

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