我正在尝试从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变量,只能解析哈希。强制编码所有参数的任何可能的解决方案?
答案 0 :(得分:1)
可以遍历每个参数并强制进行编码。
params.each { |k, v| params[k] = v.force_encoding('ISO-8859-1').encode('UTF-8') }