Ruby AWS Lambda使用替换字符(U+;FFFD)替换多部分表单数据附件中的某些字符

Ruby AWS Lambda使用替换字符(U+;FFFD)替换多部分表单数据附件中的某些字符,ruby,aws-lambda,multipartform-data,character-replacement,Ruby,Aws Lambda,Multipartform Data,Character Replacement,我正在使用AWS lambda函数接收带有附件的多部分请求,并将其上载到S3 但是Lambda函数会用替换字符替换少数字符,因此附件会损坏 我检查了一个PNG文件。 示例内容:\x89PNG\r\n\u001A\n\u0000\u0000\u0000 所有字符均按原样接收,但\x89或通常\x**被替换字符(U+FFFD)替换 我正在将附件文件\u str提取为字符串并写入文件,然后将其上载到s3 File.open(file_path, 'w') do |f| f << fil

我正在使用AWS lambda函数接收带有附件的多部分请求,并将其上载到S3

但是Lambda函数会用替换字符替换少数字符,因此附件会损坏

我检查了一个PNG文件。 示例内容:
\x89PNG\r\n\u001A\n\u0000\u0000\u0000

所有字符均按原样接收,但
\x89
或通常
\x**
被替换字符(U+FFFD)替换

我正在将附件
文件\u str
提取为字符串并写入文件,然后将其上载到s3

File.open(file_path, 'w') do |f|
  f << file_str
end
File.open(文件路径,'w')do | f|

f您需要打开二进制模式来处理(写入)二进制文件

#                      ⇓ THIS
File.open(file_path, 'wb') do |f|
  f << file_str
end
#⇓ 这
打开(文件路径,'wb')do | f|

f您需要打开二进制模式来处理(写入)二进制文件

#                      ⇓ THIS
File.open(file_path, 'wb') do |f|
  f << file_str
end
#⇓ 这
打开(文件路径,'wb')do | f|

f尝试了此操作,但它仍然提供了相同的损坏文件。
文件\u str
还必须具有
“二进制”
编码。但是如何首先获得二进制编码的文件?。我收到的字符串已经损坏,因为Ruby无法理解其中的一些字符(因此它将它们替换为替换字符)。我应该在将字符串保存到文件之前对其进行编码吗?尝试了此操作,但它仍然提供相同的损坏文件。
文件\u str
还必须具有
“二进制”
encoding。但首先我如何获得二进制编码的文件?。我收到的字符串已经损坏,因为Ruby无法理解其中的一些字符(因此它将它们替换为替换字符)。我应该在将字符串保存到文件之前对其进行编码吗?我猜问题不在于写入文件,而在于
file\u str
的编码。不管做什么,字符串编码都会迫使它成为有效的UTF-8。您需要在流程中提前查看您是正确的。我对rails也做了同样的尝试,甚至在到达控制器中的操作之前就出现了错误。错误:“Encoding::UnfinedConversionError:“\x89”从ASCII-8BIT到UTF-8”我猜问题不在于写入文件,而在于
文件的编码。不管做什么,字符串编码都会迫使它成为有效的UTF-8。您需要在流程中提前查看您是正确的。我对rails也做了同样的尝试,甚至在到达控制器中的操作之前就出现了错误。错误:“编码::未定义的转换器错误:“\x89”从ASCII-8BIT到UTF-8”