Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sidekiq活动作业稍后使用包含UTF-8字符的文本执行_Utf 8_Sidekiq_Rails Activejob - Fatal编程技术网

sidekiq活动作业稍后使用包含UTF-8字符的文本执行

sidekiq活动作业稍后使用包含UTF-8字符的文本执行,utf-8,sidekiq,rails-activejob,Utf 8,Sidekiq,Rails Activejob,我刚刚在我打电话的地方发现了这个窃听器 MyJob.perform_later(request.body.read) 有了sidekiq的活跃工作 调用request.body.read返回一些json,我认为在某些情况下它可能包含UTF-8字符(即€symbol) 在这种情况下,我会 Encoding::UndefinedConversionError Exception: "\xE2" from ASCII-8BIT to UTF-8 我知道sidekiq建议不要有复

我刚刚在我打电话的地方发现了这个窃听器

MyJob.perform_later(request.body.read)
有了sidekiq的活跃工作

调用
request.body.read
返回一些json,我认为在某些情况下它可能包含UTF-8字符(即€symbol)

在这种情况下,我会

Encoding::UndefinedConversionError Exception: "\xE2" from ASCII-8BIT to UTF-8
我知道sidekiq建议不要有复杂或长时间的工作参数,什么是最佳实践解决方案

我能想到的是在将字符串传递到作业之前对其进行base64编码(但这会使sidekiq的代码更长,我不确定这是否会成为问题) 或者将实际的json文本存储在db表中,并将新行的id传递给作业。这肯定行得通,但对我来说似乎有点过头了


有什么建议吗?

Sidekiq将使用
JSON.generate
序列化作业参数。这是可以在控制台中运行的
ASCII-8BIT
字符串的示例:

arg=“带有欧元字符的示例”。强制编码('ASCII-8BIT'))
JSON.generate([arg])
编码::未定义的转换器错误(“\xE2”从ASCII-8BIT到UTF-8)
一种选择是在将编码传递到
perform\u(稍后执行)
之前,遵循并强制编码为UTF-8。然后它将正确序列化:

arg=“带有欧元字符的示例”。强制编码('ASCII-8BIT'))
参数强制编码('UTF-8')
JSON.generate([arg])
=>“[\”带有欧元字符\“]的示例”
所以你想要的是:

MyJob.perform_later(request.body.read.force_encoding('UTF-8'))