如何在Golang中解码UTF-16BE CSV文件

时间:2019-01-08 19:15:33

标签: csv go decode utf-16

我正在尝试解码Golang中以UTF-16BE编码的CSV文件。我需要为新读者提供的charmap ISO字符号是什么?

我想调用

csv.NewReader(charmap.XXXX.NewDecoder().Reader(file))

XXXX的值应该是什么?

3 个答案:

答案 0 :(得分:0)

您尝试过吗?

https://godoc.org/golang.org/x/text/encoding/unicode#UTF16

unicode.UTF16(BigEndian, UseBOM)

答案 1 :(得分:0)

经过一番回顾,此代码提供了一种将UTF16解码为UTF8的简单方法:

https://gist.github.com/bradleypeabody/185b1d7ed6c0c2ab6cec#file-gistfile1-go

答案 2 :(得分:0)

您可以使用golang.org/x/text/encoding/unicode.UTF16从目标UTF-16 Little / Big-Endian编码到UTF-8来创建解码器。

以下代码显示了UTF-16 LE(Go playground)的工作示例:

dec := unicode.UTF16(unicode.LittleEndian, unicode.UseBOM).NewDecoder()
utf16r := getUTF16LittleEndianCSVReader()
utf8r := transform.NewReader(utf16r, dec)

csvr := csv.NewReader(utf8r)
records, err := csvr.ReadAll()
// TODO: handle err

fmt.Printf("%#v", records)
// [][]string{[]string{"id", "name"}, []string{"1", "foo"}}

切换到Big-endian应该很简单,如下所示:

enc := unicode.UTF16(unicode.BigEndian, unicode.UseBOM).NewDecoder()