在 ActionController::Parameters 上强制编码
Force encoding on ActionController::Parameters
我正在尝试保存来自 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 变量,只能解析一个散列。任何可能的强制编码所有参数的解决方案?
可以遍历每个参数并强制编码。
params.each { |k, v| params[k] = v.force_encoding('ISO-8859-1').encode('UTF-8') }
我正在尝试保存来自 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 变量,只能解析一个散列。任何可能的强制编码所有参数的解决方案?
可以遍历每个参数并强制编码。
params.each { |k, v| params[k] = v.force_encoding('ISO-8859-1').encode('UTF-8') }