0

我刚从 Ruby 1.8.7 迁移到 Ruby 1.9.2,我一直在字符串编码问题上绊倒。我的 MySQL 数据库都是 utf8,但每次我从中查询并查找字符串编码时,我都会得到 ASCII-9BIT。

ruby-1.9.2-p180 :002 > Artist.find(1043).name.encoding
 => #<Encoding:ASCII-8BIT> 

所以像 Sigur Rós 这样的艺术家会打印出“Sigur R\xC3\xB3s”。事实证明这会导致一些问题,因为我的客户端应用程序希望我的服务器返回 UTF8 json(因为一直都是这样)。一个临时的解决方法似乎是force_encoding("UTF-8")在我的代码中添加,但感觉非常混乱,特别是因为 Ruby 1.8.7 不需要这些。

我尝试将编码魔术注释添加Encoding.default_external到我的 env 文件中,encoding将参数添加到我的 database.yml 文件中,但什么也没做。

我应该如何处理 Ruby 1.9.x 和字符串编码?

--

编辑:在我的其他 Rails 应用程序中(从一开始就是 Ruby 1.9.2),所有 MySQL 字符串似乎都以 UTF-8 编码。但是数据库/表编码/字符集完全相同?!

4

1 回答 1

0

好吧,更新到 Rails 3.1.3 和 mysql2 0.3.10 似乎解决了我的问题(正在运行 Rails 3.0.3 和 mysql2 0.2.6)。不过对我来说似乎很奇怪,因为 Ruby 1.9 已经超过 3 年了,而且 Rails 3.0.3 在那之后发布了,所以我不明白为什么 Rails 3.0.x 不能很好地与 Ruby 的 1.9 新字符串编码配合使用。如果有人能补充这一点,我将不胜感激。

于 2012-07-07T19:12:59.850 回答