Rails:format.json中的编码错误

时间:2015-12-17 13:40:01

标签: ruby-on-rails json

我有一个渲染html和json的控制器索引方法:

<meta-data
  android:name="android.appwidget.provider"
  android:resource="@xml/widget_info" />

在我的html中,一切正常,名称显示为def index @articles = Article.all respond_to do |format| format.html format.json { render text: @articles.to_json } end end (带有德语变音符号)。但是,当我渲染json时,我会得到奇怪的字符,如Müller

当我查看M\u00fcller模型中title属性的编码时,会返回Article

UTF-8

但是当我把它转换成json时,我得到了错误的字符:

puts @articles.first.attributes["title"]
=> "Müller"
puts @articles.first.attributes["title"].encoding
=> #<Encoding:UTF-8>

我不确定为什么这只发生在json身上。我使用的是Rails 3.2.9。

1 个答案:

答案 0 :(得分:0)

您的render来电正在将您的JSON文档明确地呈现为text,这可能是您问题的根源。试试这个:

format.json { render json: @articles.as_json }

这将通过正常的Rails JSON编码路径,该路径非常适合正确处理UTF-8。

P.S。对于您的代码示例,那些看起来不像puts调用的输出,而是输出IRB的值表示 - 在这种情况下,UTF-8字符的转义正在发生只是为了让IRB可以为你提供一个可克服的IRB版本的字符串。