2012-04-26 42 views
3

我有一個運行在Ruby 1.9.3上的Rails 3.2應用程序,它返回存儲在MongoDB數據庫中的JSON數據。數據似乎正確地存儲在mongo中,例如, (看名字屬性):Rails UTF-8響應

{ "_id" : ObjectId("4f986cbe4c8086fdc9000002"), "created_at" : ISODate("2012-04-25T21:31:45.474Z"), "updated_at" : ISODate("2012-04-26T22:07:23.901Z"), "creator_id" : ObjectId("4f6b4d3c4c80864381000001"), "updater_id" : null, "name" : "Trädgår'n", "sort" : "tradgarn", "address" : "Nya Allén 11", "coordinates" : [ 11.9764791, 57.7045625 ], "phone" : "46031102080", "url" : "http://www.profilrestauranger.se/tradgarn/", "user_ids" : [ ] } 

但是,當我發出返回該記錄的請求,我得到這樣的事情回來(現在看的name屬性):

{"address":"Nya All\u00e9n 11","coordinates":[11.9764791,57.7045625],"created_at":"2012-04-25T23:31:45+02:00","id":"4f986cbe4c8086fdc9000002","name":"Tr\u00e4dg\u00e5r'n","phone":"46031102080","sort":"tradgarn","updated_at":"2012-04-27T00:07:23+02:00","url":"http://www.profilrestauranger.se/tradgarn/"} 

響應感興趣的人的頭:

HTTP/1.1 200 OK 
Server: nginx/1.2.0 
Date: Thu, 26 Apr 2012 22:41:13 GMT 
Content-Type: application/json; charset=utf-8 
Content-Length: 909 
Connection: keep-alive 
Status: 200 OK 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET, OPTIONS 
Access-Control-Max-Age: 1000 
Access-Control-Allow-Headers: *,x-requested-with 
X-UA-Compatible: IE=Edge 
ETag: "d2a95f06bec10d8087c3188280292d3c" 
Cache-Control: max-age=0, private, must-revalidate 
X-Request-Id: fdd042568195df279e59affe45bdcd37 
X-Runtime: 0.037134 

我似乎無法弄清楚爲什麼或在哪裏的編碼越來越亂了?是什麼賦予了?幫幫我? :)

+0

看起來它可能與JSON編碼有關,但我還不完全確定。 – 2012-04-27 19:03:27

回答

7

該問題確實是JSON UTF-8編碼之一。 #to_json方法正在轉義unicode字符。這可以通過類似的方式觀察到:

user.to_json 

# => "{\"created_at\":\"2012-04-19T18:48:01Z\",\"email\":\"tr\\u00e4dg\\[email protected]\",\"id\":10,\"updated_at\":\"2012-04-27T18:37:10Z\"}" 

但是,經過分析後,這會轉換回您期望的狀態。但是,可以使用JSON.generate來生成JSON,使用該方法可以使用#as_json方法以及構建的任何選項。這並不能逃脫unicode。要做到這一點:

JSON.generate(user.as_json) 

# => "{\"created_at\":\"2012-04-19T18:48:01Z\",\"email\":\"trädgå[email protected]\",\"id\":10,\"updated_at\":\"2012-04-27T18:37:10Z\"}" 
+0

對我來說就像是一種魅力!謝謝! :) – levitas111 2014-11-11 12:03:04

+0

不客氣! :) – tiredpixel 2014-11-13 11:39:51

+0

這不適合我 – 2015-06-05 13:35:20

0

原來我看到的問題是與寶石colorful_json。我通過它的CLI實用程序cjson運行JSON,並且搞亂了Unicode。我報告了這個問題,並且新版本的gem修復了這個問題。