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データベースがUnicodeにないことでした。これは、PosgreSQLに移行し、Unicodeであることを確認し、Tapsgemを使用してデータを移行することで修正されました。すべてこのRailscastによると:http://railscasts.com/episodes/342-migrating-to-postgresql

于 2012-12-13T11:11:03.550 に答える