【问题标题】:Ruby 1.9.x and string encodingRuby 1.9.x 和字符串编码
【发布时间】:2012-07-07 19:47:33
【问题描述】:

我刚刚从 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 不需要这些。

我尝试将编码魔术 cmets Encoding.default_external 添加到我的 env 文件中,将 encoding 参数添加到我的 database.yml 文件中,但没有任何效果。

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

--

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

【问题讨论】:

  • 如何连接到 MySQL 数据库?你设置一个连接字符串吗?你指定字符集了吗? CharSet=UTF8;
  • @phoet 就像我说的,我的 database.yml 文件中有 encoding 参数。我所有的表都将编码/字符集设置为 utf8。
  • 如你所说。但我不是在谈论您的 database.yml 文件。我说的是您在通过您使用的数据库驱动程序(mysql 或 mysql-2 gem)与数据库通信时设置的连接字符串。两者的行为不同。
  • @phoet 哎呀,对不起。我使用 mysql2 gem。我不记得任何“连接字符串”,我只是直接使用 ActiveRecord...

标签: ruby-on-rails ruby encoding utf-8


【解决方案1】:

嗯,更新到 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 新字符串编码配合使用。如果有人能补充一下,我将不胜感激。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 2010-12-29
    相关资源
    最近更新 更多