0

我正在使用 rails3.0.10

def districts
    @names = Node.where("name like ?", "%#{params[:term]}%").limit(5).map(&:name)
    respond_to do |format|
      format.json {render :json => @names}
      format.xml {render :xml => @names}
    end
  end

渲染 xml 获得正确的名称
,但渲染 json 使名称编码为 => ["name1", "name2", "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd"]
我想获得正确的名称用他们正确的语言

有什么帮助吗?

提前致谢

4

1 回答 1

0

在发送响应之前,您必须强制字符串为 UTF-8

为上面的代码添加这一行

@names.map{|name| name.force_encoding('UTF-8')}

这将循环名称数组并强制它们从 ASCII-8BIT 编码为 UTF-8

所以我的方法是

def districts
  @names = Node.where("name like ?", "%#{params[:term]}%").limit(5).map(&:name)
  @names.map{|name| name.force_encoding('UTF-8')}
  respond_to do |format|
    format.json {render :json => @names}
    format.xml {render :xml => @names}
  end
end

您还可以修改旅游模型节点,如

class Node < ActiveRecord::Base
 def name
  super().force_encoding('UTF-8')
 end
end

我确定从这段代码中可以正常工作
感谢
M.SH

于 2012-06-19T13:26:21.400 回答