【问题标题】:Text files uploaded to S3 are encoded strangely?上传到 S3 的文本文件编码奇怪?
【发布时间】:2014-04-19 15:07:50
【问题描述】:

这是最奇怪的错误,我什至不知道从哪里开始了解问题所在。

S3 一直运行良好,直到有一天(昨天)它突然对上传到奇怪字符的任何文本文件进行了奇怪的编码。每当一个文本文件有 Å、Ä、Ö 或任何其他 UTF-8 可比字符但没有英文字符时,文本文件就会混乱。我尝试过使用各种客户端以及 AWS 的 Web 界面进行上传。上传顺利,然后我下载文件并搞砸了。我试过把它下载到我的 Mac 上,我试过把它下载到上面有 Linux 的树莓上。同样的错误。

Amazons S3 服务器是否进行了任何编码?!

【问题讨论】:

  • 是的,这对我有用。使用 s3cmd 工具,我添加了标志 --encoding=UTF-8 --add-encoding-exts=js,html 并且它起作用了。谢谢@SonyKadavan
  • @SonyKadavan 您能否发布您的答案,其他人可能会觉得它有帮助。喜欢这个问题stackoverflow.com/q/41623185/3664960

标签: encoding amazon-s3


【解决方案1】:

如果您的数据包含non-ASCII multibyte characters (such as Chinese or Cyrillic characters),则必须将数据加载到VARCHAR 列。 VARCHAR 数据类型支持四字节 UTF-8 字符,但 CHAR 数据类型仅接受单字节 ASCII 字符。

来源:http://docs.aws.amazon.com/redshift/latest/dg/t_loading_unicode_data.html

【讨论】:

  • redshift 不是 s3
【解决方案2】:

您可以在 S3 控制台中的文件上显式设置“Content-Type: text/plain; charset=utf-8”。

这将告诉 S3 用作文本。

【讨论】:

  • 我们应该在哪里设置这个?
  • 在我使用 aws-sdk-ruby 库的情况下,我做到了:bucket.object("myfile.txt").put(body: "unicöde cöntänt", content_type: "text/plain; charset=utf-8")
  • 如果是 CSV,它将转换为二进制/八进制格式,有人知道修复吗? "text/csv; charset=utf-8"
  • @pootzko 选择文件/文件夹 > 操作 > 更改元数据
  • @ManojJadhav csv 文件的任何解决方案?
【解决方案3】:

不知道为什么,但 Sony Kadavan 的回答对我来说不起作用。

而不是:

内容类型:文本/纯文本;字符集=utf-8

我用过:

内容类型:文本/html;字符集=utf-8

这似乎奏效了。

【讨论】:

  • 在我的情况下它也没有帮助,但是在从文件系统读取文件期间设置编码对我有帮助
【解决方案4】:

我遇到了同样的问题,我通过在文件的 properties -> metadata 中添加 charset=utf-8 解决了这个问题

【讨论】:

  • 我的 s3Bucket 中没有元数据部分 :( 什么时候改变?
  • 也许您需要从按钮“+ 添加元数据”@albatross 中添加它
【解决方案5】:

在我的问题中,我也遇到了从文件系统读取文件作为 UFT8 的问题,所以我在 s3 中得到了错误的文件编码,直到我添加了

InputStreamReader isr = new InputStreamReader(fileInputStream, "UTF8");

而不是

InputStreamReader isr = new InputStreamReader(fileInputStream);

请注意这个可能的问题

【讨论】:

    【解决方案6】:

    对于那些使用 boto3 (python 3) 上传并且使用奇怪字符而不是重音符号(例如葡萄牙语和法语)的人,Toni ChazSony Kadavan 的答案给了我要修复的提示。在调用 put_object 时向 ContentType 参数添加“;charset=utf-8”足以正确显示重音。

    content_type="text/plain;charset=utf-8"
    bucket_obj.put_object(Key=key, Body=data, ContentType=content_type)
    

    【讨论】:

      【解决方案7】:

      在 .html 文件的 <head> 中添加 <meta charset="utf-8" /> 解决了我的问题。

      【讨论】:

        猜你喜欢
        • 2022-10-10
        • 1970-01-01
        • 2020-07-23
        • 2011-09-22
        • 2011-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-03
        相关资源
        最近更新 更多