本文介绍: 简单概括就是:编码问题windowsexcel打开csv本文件时,默认使用的是系统内的ANSI,在中文环境下就是GB2312。一般两种方法,在文件创建指定让Excel默认打开乱码编码,或者加BOM 标记(Byte Order Mark 字节顺序标记),让excel指定编码打开。2.使用utf-8-sig即在文件写入 0xEF、0xBB、0xBF,让excel识别出这是utf-8编码,用utf-8编码打开csv文件。如果是数据流返回可以指定编码格式写入utfbomcsv

         这里讨论问题是,当用记事本打开带有中文字符csv正常时,用excel打开却是乱码

        简单概括就是:编码问题windowsexcel打开csv本文件时,默认使用的是系统内的ANSI,在中文环境下就是GB2312。如果写文件时,用的编码格式是UTF-8那么excel用GB2312打开肯定是乱码

        一般两种方法,在文件创建指定让Excel默认打开不乱码的编码,或者加BOM 标记(Byte Order Mark 字节顺序标记),让excel用指定的编码打开。

        所以解决的思路就很清晰:

        1.使用GB2312,gbk,gb18030这类windows中文默认的编码。

        2.使用utf-8-sig即在文件写入 0xEF、0xBB、0xBF,让excel识别出这是utf-8编码,用utf-8编码打开csv文件

实例

pythoncsv文件指定编码格式,如gb2312,gbk,gb18030,pythoncsv包不需要文件写入0xEF、0xBB、0xBF,直接指定utf-8-sig就可以。

with open('file.csv', 'w', newline='', encoding='gb18030', mode='wb') as file:  
    writer = csv.writer(file)  
    # 写入数据到CSV文件

如果是数据流返回,可以指定编码格式

"Content-Type": "application/octet-stream; charset=utf-8-sig"

写入utf-bomcsv

没有bom的utf

go 在文件头写入 BOM

func generateCSV(data [][]string) []byte {
	var buffer bytes.Buffer
	writer := csv.NewWriter(&buffer)
	for index, row := range data {
		if index == 0 {
			if len(row) > 0 {
				// 写入 UTF-8 BOM让excel自己识别csv
				row[0] = "xEFxBBxBF" + 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

原文地址:https://blog.csdn.net/qq_26372385/article/details/134146185

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_27760.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注