Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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
Encoding 上传到S3的文本文件编码奇怪?_Encoding_Amazon S3 - Fatal编程技术网

Encoding 上传到S3的文本文件编码奇怪?

Encoding 上传到S3的文本文件编码奇怪?,encoding,amazon-s3,Encoding,Amazon S3,这是最奇怪的错误,我甚至不知道从哪里开始理解哪里出了问题 S3一直工作得很好,直到有一天(昨天),它突然对上传到奇怪字符的任何文本文件进行了奇怪的编码。每当文本文件包含Å、Ä、Ö或任何其他UTF-8可比字符,但没有英文字符时,文本文件就会出错。我尝试过使用各种客户端以及AWS的web界面上传。上传很顺利,然后我下载了文件,结果搞砸了。我试着把它下载到我的Mac上,我试着把它下载到一个装有Linux的树莓上。同样的错误 Amazons S3服务器有任何编码吗 如果数据包含非ASCII多字节字符(如

这是最奇怪的错误,我甚至不知道从哪里开始理解哪里出了问题

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


Amazons S3服务器有任何编码吗

如果数据包含
非ASCII多字节字符(如中文或西里尔文字符)
,则必须将数据加载到
VARCHAR
列。
VARCHAR
数据类型支持四字节UTF-8字符,但
CHAR
数据类型仅接受单字节ASCII字符


来源:

您可以在S3控制台的文件上显式设置“内容类型:text/plain;charset=utf-8”


这将告诉S3作为文本。

不确定为什么,但索尼Kadavan的答案在我的案例中不起作用

而不是:

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

我用过:

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


这似乎奏效了

我也遇到了同样的问题,我通过在文件的属性->元数据中添加
charset=utf-8
解决了这个问题


在我的问题中,我也遇到了将文件系统中的文件读取为UFT8的问题,因此在添加之前,我在s3中得到了错误的文件编码

InputStreamReader isr = new InputStreamReader(fileInputStream, "UTF8");
而不是

InputStreamReader isr = new InputStreamReader(fileInputStream);

对于那些使用boto3(python 3)上传并且使用奇怪字符而不是重音符号(例如葡萄牙语和法语)的用户,请注意这个可能的问题,

,和的回答给了我修复的提示。调用put_对象时,将“charset=utf-8”添加到ContentType参数足以正确显示重音

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

在.html文件的
中添加
为我解决了这个问题。

是的,这对我很有效。使用s3cmd工具,我添加了标志
--encoding=UTF-8--addencoding exts=js,html
,它成功了。谢谢@SonyKadavan@SonyKadavan你能把你的答案贴出来吗?其他人会觉得它很有帮助。像这个问题一样,我们到底应该在哪里设置它呢?在我使用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 select file/folder>actions>change metadataredshift不是S3在我的例子中它也没有帮助,但是在从文件系统读取文件的过程中设置编码对我有帮助。我的s3Bucket中没有元数据部分:(它什么时候改变?也许你需要从按钮添加它。)“+添加元数据”@albatross