从S3下载时CSV编码损坏

时间:2018-11-11 22:39:46

标签: csv go amazon-s3

我正尝试使用golang的SDK从S3下载CSV文件,但该文件编码错误,被解释为一个切片。

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

我的新方法是手动删除有问题的字节序列。这太可怕了。 Godocs在此方面需要工作。

距离更近了,但现在我必须在新行上分开,然后再在逗号上分开。

修改 当我打印出字节时,它看起来像: "\ufeffH1,H2\r,field1,field2\r

我尝试使用以下编码:

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

0 个答案:

没有答案