1

我在 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> 

这个“带有扫描字符 \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 响应时发生。

4

1 回答 1

0

好的,问题是 MySQL db 不是 unicode。现在通过迁移到 PosgreSQL 来解决这个问题,确保它是 unicode 并使用 Taps gem 迁移数据。一切都根据这个 Railscast:http ://railscasts.com/episodes/342-migrating-to-postgresql

于 2012-12-13T11:11:03.550 回答