在ActionController :: Parameters上强制编码

时间:2016-06-13 15:39:52

标签: ruby-on-rails actioncontroller

我正在尝试从PayPal的IPN中保存参数,以便以后可以访问这些参数并用于交叉参考。

将一小段代码保存在paypal_log列中的简单代码:

@order.paypal_log = params.to_json

工作得很好,推向生产,仍然工作正常。调查另一个问题的日志,我遇到了以下几行:

Completed 500 Internal Server JSON::GeneratorError (source sequence is illegal/malformed utf-8):

它指向的行是上面的params.to_json

环顾四周后,我发现force_encoding("ISO-8859-1").encode("UTF-8") (source)

我将行更改为params.force_encoding("ISO-8859-1").encode("UTF-8").to_json并运行我的测试,错误为:

undefined method `force_encoding' for #<ActionController::Parameters:0x000000073357f0>

这让我觉得,由于某种原因,你不能解析整个params变量,只能解析哈希。强制编码所有参数的任何可能的解决方案?

1 个答案:

答案 0 :(得分:1)

可以遍历每个参数并强制进行编码。

params.each { |k, v| params[k] = v.force_encoding('ISO-8859-1').encode('UTF-8') }