Подтвердить что ты не робот

Текстовые файлы, загруженные на S3, закодированы странно?

Это самая странная ошибка, и я даже не знаю, с чего начать понимать, что неправильно.

S3 работает хорошо, до внезапно однажды (вчера) он странно кодирует любой текстовый файл, загруженный в странные символы. Всякий раз, когда текстовый файл имеет Å, Ä, Ö или любой другой UTF-8, сопоставимый, но не английский, текстовый файл перепутан. Я попытался загрузить с помощью различных клиентов, а также веб-интерфейс AWS. Загрузка идет хорошо, затем я загружаю файл, и он перепутался. Я попытался загрузить его на свой Mac, я попробовал загрузить его на малину с Linux на нем. Такая же ошибка.

Есть ли какая-либо кодировка, выполняемая серверами Amazons S3?!

4b9b3361

Ответ 1

У меня была такая же проблема, и я решил ее, добавив charset=utf-8 в свойствах → метаданные файла

enter image description here

Ответ 2

Вы можете явно указать "Content-Type: text/plain; charset = utf-8" в файле в консоли S3.

Это будет означать, что S3 служит в качестве текста.

Ответ 3

Не знаю, почему, но ответ от Sony Kadavan не работал в моем случае.

Вместо

Content-Type: text/plain; кодировка = UTF-8

Я использовал:

Content-Type: text/html; кодировка = UTF-8

Казалось, что это сработало.

Ответ 4

В моей проблеме у меня возникла проблема с чтением файла из файловой системы как UFT8, поэтому я получил неправильную кодировку файла в s3, пока не добавил

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

вместо

InputStreamReader isr = new InputStreamReader(fileInputStream);

пожалуйста, обратите внимание на эту возможную проблему

Ответ 5

Для тех, кто использует boto3 (python 3) для загрузки и использует странные символы вместо акцентуации (например, на португальском и французском языках), Тони Чаз и Sony Kadavan ответы дали мне подсказку, чтобы исправить. Добавление "; charset = utf-8" к аргументу ContentType при вызове put_object было достаточно для правильного отображения акцентуации.

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

Ответ 6

Если ваши данные включают 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