Кодировка CSV не работает при загрузке с S3 - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь загрузить CSV-файл с S3, используя SDK Голанга, но он выходит неправильно закодированным и интерпретируется как один фрагмент.

input := &s3.GetObjectInput{
    Bucket:                  aws.String(bucket),
    Key:                     aws.String(key),
    ResponseContentType:     aws.String("text/csv"),
    ResponseContentEncoding: aws.String("utf-8"),
}

object, err := s3.New(s).GetObject(input)
if err != nil {
    var obj s3.GetObjectOutput

    return &obj, err
}

defer object.Body.Close()

lines, err := csv.NewReader(object.Body).ReadAll()
if err != nil {
    log.Fatal(err)
}

log.Printf("%q", lines[0])


// returns ["\ufeffH1" "H2\r" "field1" "field2\r" "field1" field2\r00602"]

Я предполагаю, что это неправильная кодировка символов. Проблема в том, что мне не понятно, что это за кодировка. Когда я помещаю файл, я указываю csv.

Я бы ожидал увидеть [][]string:

[
  [],
  []
]

Любой совет?

Подход 2

buffer := new(bytes.Buffer)
buffer.ReadFrom(object.Body)

str := buffer.String()

lines, err := csv.NewReader(strings.NewReader(str)).ReadAll()
if err != nil {
    log.Fatal(err)
}

log.Printf("length: %v", len(lines))
// still one line

Подход 3

Мой новый подход заключается в удалении проблемных последовательностей байтов вручную. Это довольно ужасно. Годок над этим нужно работать.

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

Редактировать Когда я распечатываю байты, это выглядит так: "\ufeffH1,H2\r,field1,field2\r

Я пытался использовать следующие кодировки:

utf-8, iso-8859-1, iso-8859-1:utf-8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...