2010-03-10 59 views
1

默认情况下Rails允许我们的应用程序输入非UTF8数据,如用户:¶®«¼妥善处理Unicode字符Rails中

然而,当我们试图从数据库中检索数据,呈现在模板的Rails错误地认为它是UTF-8格式并引发错误。

ArgumentError: invalid byte sequence in UTF-8 

处理这个问题的最佳方法是什么?我看到了一个修复程序,建议在用户可以输入的每个地方清理数据。但是,这将涉及更改大量的代码,并且会完全删除这些字符。理想情况下,我们希望将一些字符转换为UTF-8等效字符。

我们的环境:

Ruby: 1.9.1 
Rails 2.3.5 
MySql Gem: 2.8.1 

这是我们的一个严重而紧迫的问题,所以你的答案非常赞赏!

+0

'NPUT非UTF8数据,如xxx' - 为什么这些字符不是UTF8?我可以看到,'在每个地方清理数据'与编码无关。这意味着确保用户不会注入无效的字符串(例如''tags等)。 很遗憾,你在数据库中看到了什么,你有什么类型的列? – 2010-03-10 03:16:48

+0

我不知道解决方案,但如果这是迫切的,开始赏金可能是一个好主意。 – kikito 2010-03-10 09:43:55

+0

Dmitriy:我认为问题可能是数据库编码从Latin1切换到UTF8而没有清理数据。我试图将它切换回latin1而没有运气,Rails仍将它视为UTF8。 数据库编码:utf8 表编码:utf8 列类型:文本 切换数据库和表编码不能解决问题。 Rails仍然认为这个字符串是UTF8编码的。 egarcia:谢谢你的建议。我会添加一个赏金,但是你必须等两天才能添加一个赏金。 – Gdeglin 2010-03-10 12:04:02

回答

0

尝试使用mysql2 gem(版本0.1.6或更高版本)而不是mysql。

它还是相当新的,但一直在生产中很好地工作,并将从数据库中检索所有字符串作为utf-8。

刚刚安装的宝石和改变你的database.yml文件,以包含“适配器:mysql2”