2012-12-04 45 views
0

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

\"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响应时才会发生这种情况。

+1

您确定数据库的字符集配置正确吗?例如,我不认为MySQL的默认值是UTF8,并且在最近的某个时候,PostgreSQL的默认值是7位ASCII。很明显,输入('Item.create')和输出('Item.last')之间存在转换 - 我将在调用to_json之前对其进行调查。 –

+0

是的,就是这样! MySQL数据库不在unicode中。我现在设法通过使用这个railcast迁移到PosgreSQL来解决这个问题:http://railscasts.com/episodes/342-migrating-to-postgresql –

回答