我有一个渲染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。
答案 0 :(得分:0)
您的render
来电正在将您的JSON文档明确地呈现为text
,这可能是您问题的根源。试试这个:
format.json { render json: @articles.as_json }
这将通过正常的Rails JSON编码路径,该路径非常适合正确处理UTF-8。
P.S。对于您的代码示例,那些看起来不像puts
调用的输出,而是输出IRB的值表示 - 在这种情况下,UTF-8字符的转义正在发生只是为了让IRB可以为你提供一个可克服的IRB版本的字符串。