Ruby on rails 字符集和POST请求

Ruby on rails 字符集和POST请求,ruby-on-rails,character-encoding,http-headers,Ruby On Rails,Character Encoding,Http Headers,我有一个Rails 2.3.5应用程序,可以很好地处理UTF-8和国际字符。现在我已经对一个支付网关进行了一些集成,在那里我发布了一些数据,等待一段时间,然后得到一个回复。问题是,当我得到那篇文章的时候,国际角色被打破了。我得到的不是瑟伦森,而是瑟伦森。如果我使用iconv-t ISO-8859-1-f UTF8,它会正确地转换为前者,我可以在OSX命令提示符下执行此操作。我已经在控制器中使用logger.inforequest.headers.inspect检查了POST请求,可以看到没有给出

我有一个Rails 2.3.5应用程序,可以很好地处理UTF-8和国际字符。现在我已经对一个支付网关进行了一些集成,在那里我发布了一些数据,等待一段时间,然后得到一个回复。问题是,当我得到那篇文章的时候,国际角色被打破了。我得到的不是瑟伦森,而是瑟伦森。如果我使用iconv-t ISO-8859-1-f UTF8,它会正确地转换为前者,我可以在OSX命令提示符下执行此操作。我已经在控制器中使用logger.inforequest.headers.inspect检查了POST请求,可以看到没有给出任何字符集参数

根据他们的说法,来自网关的帖子应该是ISO-8859-1——Rails认为这是UTF8的问题吗?这与我看到的问题一致吗

我知道一个解决方案是在控制器中使用Iconv简单地转换参数散列,但我想知道发生了什么

提前谢谢

问候,


Jacob

您能否验证请求头是否在POST中设置正确。您可以在以下链接中看到可接受的值

我最后做了这样一件事:

在模型中:

FIELDS_TO_FIX=[:name, :city, :address]  

# DIBS sucks and sends UTF8 in some strange encoding. So we have to do an array.pack on
# strings when posting to DIBS and unpack them at callback.
#
def self.fix_encoding(params)  
  FIELDS_TO_FIX.each do |f|
    next if params[f].nil?
    params[f]=params[f].unpack("M")[0].force_encoding("UTF-8")
  end
  params
end
在控制器的创建操作中:

  params[:booking]=Booking.fix_encoding(params[:booking])
并认为向外部资源发布的帖子:

<input type="hidden" name="booking[name]" value="<%= [@booking.name].pack("M") %>" />

我希望它能帮助别人。

我有确切的问题。轨道3.2。你找到解决方案了吗?我找到了-我贴了一个答案和解决方案。我希望有帮助。