csv - 如何在 Golang 中解码 UTF-16BE CSV 文件
问题描述
我正在尝试在 Golang 中解码以 UTF-16BE 编码的 CSV 文件。我必须为新读者调用的 Charmap ISO 字符编号是多少?
我想调用
csv.NewReader(charmap.XXXX.NewDecoder().Reader(file))
XXXX 的值应该是多少?
解决方案
您可以使用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()
推荐阅读
- python-3.x - 使用 Terraform remote-exec 运行简单的 Web 服务器
- azure - 通过 MS Graph Explorer 更新 Azure AD App appRoles
- c - Execve not working as expected
- laravel-5 - JSON 对象存储在数据库表中。(如何访问)
- c# - 来自 Angular 前端的 WebApi2 跨域请求被阻止
- discord.js - discord.js 保存附件“未定义”?
- sql - [Microsoft][ODBC Driver Manager] 无法建立与 SQL 服务器的连接
- google-cloud-dataflow - 如何使用 Beam SQL 执行查找
- pug - 是否有停止处理和退出命令?
- ngrx-effects - ngrx 效果中的错误处理