我正在使用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库中的编码选项。这些基本上与正则表达式相同。
这一切都归结为我正在尝试匹配输出以进行测试。我是否应该关注这些特殊字符?是否有更好的方法来匹配这些字符而不盲目删除它们?
答案 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