首页 > 解决方案 > 如何在 Golang 中解码 UTF-16BE CSV 文件

问题描述

我正在尝试在 Golang 中解码以 UTF-16BE 编码的 CSV 文件。我必须为新读者调用的 Charmap ISO 字符编号是多少?

我想调用

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

XXXX 的值应该是多少?

标签: csvgodecodeutf-16

解决方案


您可以使用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()

推荐阅读