二级网站怎样做,沧州市青县建设局网站,建筑人才网招聘网官网,商城源码免费这里讨论的问题是#xff0c;当用记事本打开带有中文字符的csv正常时#xff0c;用excel打开却是乱码。 简单概括就是#xff1a;编码问题#xff0c;windows的 excel打开csv文本文件时#xff0c;默认使用的是系统内的ANSI#xff0c;在中文环境下就是GB2312。如果写文件… 这里讨论的问题是当用记事本打开带有中文字符的csv正常时用excel打开却是乱码。 简单概括就是编码问题windows的 excel打开csv文本文件时默认使用的是系统内的ANSI在中文环境下就是GB2312。如果写文件时用的编码格式是UTF-8那么excel用GB2312打开肯定是乱码。 一般两种方法在文件创建时指定让Excel默认打开不乱码的编码或者加BOM 标记Byte Order Mark 字节顺序标记让excel用指定的编码打开。 所以解决的思路就很清晰 1.使用GB2312gbk,gb18030这类windows下中文默认的编码。 2.使用utf-8-sig即在文件头写入 0xEF、0xBB、0xBF让excel识别出这是utf-8编码用utf-8编码打开csv文件。
实例
python 写csv文件时指定编码格式如gb2312,gbk,gb18030,python的csv包不需要再文件头写入0xEF、0xBB、0xBF直接指定utf-8-sig就可以。
with open(file.csv, w, newline, encodinggb18030, modewb) as file: writer csv.writer(file) # 写入数据到CSV文件
如果是数据流返回可以指定编码格式
Content-Type: application/octet-stream; charsetutf-8-sig
写入utf-bom的csv 没有bom的utf go 在文件头写入 BOM
func generateCSV(data [][]string) []byte {var buffer bytes.Bufferwriter : csv.NewWriter(buffer)for index, row : range data {if index 0 {if len(row) 0 {// 写入 UTF-8 BOM让excel自己识别csvrow[0] \xEF\xBB\xBF row[0]}}writer.Write(row)}writer.Flush()return buffer.Bytes()
}
参考
Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别 - 知乎
ASCII、GB2312、GBK、GB18030、Unicode、UTF-8、BIG5 编码分析_gb18030和gbk-CSDN博客
csv 文件打开乱码有哪些方法可以解决 - 知乎
encoding - Microsoft Excel mangles Diacritics in .csv files? - Stack Overflow