csv文件EXCEL默认打开乱码问题

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

简单概括就是:编码问题,windows的 excel打开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文件。

实例:

python 写csv文件时指定编码格式,如gb2312 ,gbk ,gb18030 ,python的csv包不需要再文件头写入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-bom的csv

没有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] = "\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

相关推荐
Q26433650231 小时前
【有源码】基于 Hadoop 生态的化妆品销售数据存储分析与可视化 面向化妆品行业的用户画像构建与销售机会识别研究
大数据·hadoop·python·机器学习·spark·毕业设计·课程设计
2601_962078196 小时前
Python中calendar.weekday用法
python·编程技巧·calendar·日期处理·weekday
2601_962218617 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
2601_966949657 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_962885727 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
李高钢7 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi
ocean21038 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
Warson_L8 小时前
Python的OrderedDict
python
隐擎fox8 小时前
高性能网络爬虫架构设计:基于 Python 的长连接复用与分布式会话池调度实践
分布式·python·网络协议·tcp/ip·高并发·网络爬虫、
Warson_L8 小时前
Python的TypedDict
python·langchain·llm