关于golang:Golang导出CSV数据并解决数据乱码问题

6次阅读

共计 1197 个字符,预计需要花费 3 分钟才能阅读完成。

在日常开发中,针对数据导出,咱们能够导出 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
}
正文完
 0