【问题标题】:Rails to_json method: problems with unicode charactersRails to_json 方法:unicode 字符的问题
【发布时间】:2012-12-13 19:11:03
【问题描述】:

我在 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 响应时才会发生。

【问题讨论】:

  • 您确定您的数据库的字符集配置正确吗?例如,我不认为 MySQL 的默认值是 UTF8,并且在最近的某个时间点,PostgreSQL 的默认值是 7 位 ASCII。很明显,输入 (Item.create) 和输出 (Item.last) 之间存在转换——在转到 to_json 之前,我会对此进行调查。
  • 是的,就是这样! MySQL 数据库不是 unicode。我现在通过使用这个 railcast 迁移到 PosgreSQL 设法解决了这个问题:railscasts.com/episodes/342-migrating-to-postgresql

标签: ruby-on-rails json unicode


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-26
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2017-01-31
    相关资源
    最近更新 更多