Golang导出CSV数据并解决数据乱码问题
在日常开发中,针对数据导出,我们可以导出Excel格式,但是如果是针对大数据量的导出,直接导出为Excel格式可能需要占用大量内存,且导出速度很慢。这个时候我们就需要导出为CSV格式。
CSV 格式
CSV本质上是文本文件,该文件有以下要求:
- 列之间用逗号分隔,行之间用换行分隔
- 单元格如果有逗号、引号之类的字符,该单元格需要使用双引号括起来
- 如果内容包含中文,直接输出可能会乱码
实现方式
golang 官方有csv的库,可以很容易的实现csv数据的写入。
golang实现csv数据写文件
func main() {
f, err := os.Create("data.csv")
if err != nil {
panic(err)
}
defer f.Close()
f.WriteString("xEFxBBxBF") // 写入UTF-8 BOM,避免使用Microsoft Excel打开乱码
writer := csv.NewWriter(f)
writer.Write([]string{"编号", "姓名", "年龄"})
writer.Write([]string{"1", "张三", "23"})
writer.Write([]string{"2", "李四", "24"})
writer.Write([]string{"3", "王五", "25"})
writer.Write([]string{"4", "赵六", "26"})
writer.Flush() // 此时才会将缓冲区数据写入 }
golang实现web导出csv数据
此处以gin框架为例,如果用的go官方web库,其实差不多是一样的:
func ExportCsv(c *gin.Context) {
bytesBuffer := &bytes.Buffer{}
bytesBuffer.WriteString("xEFxBBxBF") // 写入UTF-8 BOM,避免使用Microsoft Excel打开乱码
writer := csv.NewWriter(bytesBuffer)
writer.Write([]string{"编号", "姓名", "年龄"})
writer.Write([]string{"1", "张三", "23"})
writer.Write([]string{"2", "李四", "24"})
writer.Write([]string{"3", "王五", "25"})
writer.Write([]string{"4", "赵六", "26"})
writer.Flush() // 此时才会将缓冲区数据写入
// 设置下载的文件名 c.Writer.Header().Set("Content-Disposition", "attachment;filename=data.csv")
// 设置文件类型以及输出数据 c.Data(http.StatusOK, "text/csv", bytesBuffer.Bytes())
return
}
到此这篇关于“Golang导出CSV数据并解决数据乱码问题”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
Golang导出CSV数据并解决数据乱码问题
解决php csv文件导入mysql中文乱码
解决php导出csv文件乱码的问题(图文)
php导出csv文件打开乱码的解决方法
php 中fgetcsv函数将csv文件导入mysql数据库
php导出csv文件乱码问题的解决实例
mysql导入导出数据时中文乱码的解决办法
php导出(生成)CSV文件的小例子
PHP导出CSV文件不换行的问题解析
mysql中utf-8编码数据库转换成GBK编码的问题