【问题标题】:How to decode a UTF-16BE CSV file in Golang如何在 Golang 中解码 UTF-16BE CSV 文件
【发布时间】:2019-06-03 12:38:39
【问题描述】:

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

我想调用

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

XXXX的值应该是多少?

【问题讨论】:

标签: csv go decode utf-16


【解决方案1】:

您可以使用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"}}

切换到大端应该像下面这样简单:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      你试过了吗?

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

      unicode.UTF16(BigEndian, UseBOM)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        • 1970-01-01
        • 2020-11-07
        • 1970-01-01
        • 2019-05-10
        • 2021-11-20
        • 1970-01-01
        相关资源
        最近更新 更多