GO 生成不正确的 UTF-8 字符,如 ö
GO generate incorrect UTF-8 chars like ö
我正在构建一个 GO 应用程序,我想在其中通过 http 服务器从缓冲区输出一个 cvs 字符串。
我正在将其放入 csv 缓冲区:
var buffer bytes.Buffer
resp := csv.NewWriter(&buffer)
resp.Write("Schröder")
通过http服务器输出:
resp.Flush()
w.Header().Set("Content-Type", "text/csv; charset=utf-8")
w.Write([]byte(buffer.String()))
然后当我打开我的 url 时,会下载一个由 Excel 打开的 csv 文件。在该 Excel 表中,字段值被转换为“Schröder”。
任何想法,我已经在这个项目上呆了一个星期了?
问题不在 Go 而在 Excel。保存文件时,数据以 UTF-8 编码的信息丢失,因为保存的文件没有编码属性。
因此 Excel 只会看到计划数据,没有关于编码的信息。有几个技巧可以让 Excel 做出正确的猜测,比如在文件的开头放置正确的字节顺序标记 (BOM)。参见 Is it possible to force Excel recognize UTF-8 CSV files automatically?。但是仅在 HTTP Content-type
header 中指定 charset=utf-8
将无济于事,因为 Excel 无法获取此信息。
我正在构建一个 GO 应用程序,我想在其中通过 http 服务器从缓冲区输出一个 cvs 字符串。
我正在将其放入 csv 缓冲区:
var buffer bytes.Buffer
resp := csv.NewWriter(&buffer)
resp.Write("Schröder")
通过http服务器输出:
resp.Flush()
w.Header().Set("Content-Type", "text/csv; charset=utf-8")
w.Write([]byte(buffer.String()))
然后当我打开我的 url 时,会下载一个由 Excel 打开的 csv 文件。在该 Excel 表中,字段值被转换为“Schröder”。
任何想法,我已经在这个项目上呆了一个星期了?
问题不在 Go 而在 Excel。保存文件时,数据以 UTF-8 编码的信息丢失,因为保存的文件没有编码属性。
因此 Excel 只会看到计划数据,没有关于编码的信息。有几个技巧可以让 Excel 做出正确的猜测,比如在文件的开头放置正确的字节顺序标记 (BOM)。参见 Is it possible to force Excel recognize UTF-8 CSV files automatically?。但是仅在 HTTP Content-type
header 中指定 charset=utf-8
将无济于事,因为 Excel 无法获取此信息。