1

我正在使用 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 库中的一些编码选项。这些基本上和正则表达式做同样的事情。

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

4

2 回答 2

4

尝试添加:

# encoding: utf-8

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

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

在您的规范工作中。

于 2012-09-26T07:36:04.633 回答
0

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

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

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

于 2013-11-14T05:37:37.537 回答