ami*_*ena 2 ruby ruby-on-rails amazon-s3 amazon-web-services aws-sdk
当我尝试在 S3 上创建一个包含特殊字符的文件时‘’ “” – — é,错误的数据被写入文件,并且奇怪的字符出现在文件中。我正在使用亚马逊提供的官方aws-sdkruby gem。下面是示例代码:
@bucket = AppConfig.s3_bucket
@s3 = AWS::S3.new
file = @s3.buckets[@bucket].objects['amit/test']
file.write("‘test1’ “test2” test–test—test3 é-test", :acl => :public_read)
Run Code Online (Sandbox Code Playgroud)
我也试过:
file.write("‘test1’ “test2” test–test—test3 é-test", :acl => :public_read, :content_type => 'text/html')
file.write("‘test1’ “test2” test–test—test3 é-test", :acl => :public_read, :content_type => 'text/plain')
file.write("‘test1’ “test2” test–test—test3 é-test", :acl => :public_read, :content_type => 'text/plain', :content_encoding => 'utf-8')
Run Code Online (Sandbox Code Playgroud)
输出文件如下所示:
‘test1’ “test2†test–test—test3 é-test
我已经尝试过 aws-sdk 版本1.11.1和1.65.0.
这看起来你只需要指定文件的字符编码。‘test1’ “test2†test–test—test3 é-test如果您将其视为 Windows-1252 编码而不是 UTF-8,您看到的字符串就是您的测试字符串的样子。如果您正在浏览器中查看(如果没有设置编码,通常默认为 1252),请尝试将浏览器使用的编码更改为 UTF-8(菜单类似于View ? Encoding)。
我不熟悉 AWS api,但查看文档建议您可以使用调用:content_type选项指定内容类型write。尝试:
file.write("‘test1’ “test2” test–test—test3 é-test", :acl => :public_read, :content_type => "text/plain; charset=utf-8")
Run Code Online (Sandbox Code Playgroud)
(或者你可能想要text/html而不是text/plain。)
如果我理解了文档,这应该会导致 AWS 在检索对象时设置内容类型标头。
这一切都取决于您使用什么来获取读取标头的对象。如果不是,您可能必须配置您的客户端以告诉它数据是 UTF-8。
| 归档时间: |
|
| 查看次数: |
6394 次 |
| 最近记录: |