Rails to_json方法:unicode字符的问题

时间:2012-12-04 15:34:34

标签: ruby-on-rails json unicode

我在Rails应用程序中遇到了unicode字符问题。问题是,当我使用包含斯堪的纳维亚字符的字符串存储对象时,使用to_json方法时这些字符无法正确呈现。基本上所有这些字符都是这样呈现的:

\"description\":\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\"

以下是示例:

 Item.create(:title => "Test title", :description => "With scandic characters öäöäö")
 => #<Item id: 198, title: "Test title", priority: nil, description: "With scandic characters öäöäö", bought_when: nil, warranty_until: nil, created_at: "2012-12-04 15:22:19", updated_at: "2012-12-04 15:22:19", user_id: nil, custom_id: nil, uuid: nil, position: 1, public: nil, secure_details: "", bookmark_id: nil, giveaway: nil, trash: false> 

此时创建的对象看起来没问题。

 Item.last

返回

 => #<Item id: 198, title: "Test title", priority: nil, description: "With scandic characters \xC3\xB6\xC3\xA4\xC3\xB6\xC3\xA4\xC3\xB6", bought_when: nil, warranty_until: nil, created_at: "2012-12-04 15:22:19", updated_at: "2012-12-04 15:22:19", user_id: nil, custom_id: nil, uuid: nil, position: 1, public: nil, secure_details: "", bookmark_id: nil, giveaway: nil, trash: false> 

这个“使用scandic characters \ xC3 \ xB6 \ xC3 \ xA4 \ xC3 \ xB6 \ xC3 \ xA4 \ xC3 \ xB6” - 它看起来还不错吗?或者我是否在项目创建阶段错过了一些正确的编码?

无论如何,现在当调用Item.last.to_json时,我得到了这个:

"description\":\"With scandic characters \\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\"

此时字符串肯定会被破坏。

我对Rails中正确的字符编码缺乏一些了解,因此任何提示都会受到赞赏。但是,该项在浏览器中呈现时看起来很好 - 只有在执行JSON响应时才会发生这种情况。

1 个答案:

答案 0 :(得分:0)

好的,问题是MySQL数据库不是unicode。现在通过迁移到PosgreSQL来确定它,确保它处于unicode并使用Taps gem来迁移数据。所有根据这个Railscast:http://railscasts.com/episodes/342-migrating-to-postgresql