CSV文件中的中文乱码--UTF-8 with BOM

1. 现象

在使用了UTF-8格式编码之后,CSV文件在Excel中打开还是乱码。

2. 原因

win系统在打开CSV文件时,会判断并选择CSV文件的编码格式。
win默认是需要使用带BOM的UTF-8编码,才能打开不乱码。读不到BOM的格式码,会认为是ANSI格式,进而造成csv中的中文乱码。

3. BOM

3.1 什么是BOM?

BOM(Byte Order Mark,字节顺序标记) 是位于文件开头的特殊标记,用于标识文本文件的编码方式和字节顺序(仅对多字节编码如UTF-16/UTF-32有意义)。

3.2 BOM的作用

  • 标识编码格式​:帮助程序快速识别文件是UTF-8、UTF-16还是UTF-32编码。
  • 解决乱码问题​:避免程序误判编码(如将UTF-8误认为ANSI/GBK)。
  • 字节顺序标记​:仅对UTF-16/UTF-32有效(大端序或小端序),UTF-8的字节顺序固定,无需标记顺序

3.3 特殊性

  • 非必需但广泛兼容​:
    UTF-8本身不需要BOM(因字节顺序固定),但Windows系统(如记事本)依赖BOM识别UTF-8文件,无BOM可能被误判为ANSI。
  • 现代趋势​:
    Web开发、代码文件(如JSON、Python)通常禁用BOM,因部分解析器会报错。

4. 如何解决乱码?

4.1 手动设置格式

win系统下将csv文件选择记事本打开,然后另存为,选择格式为“带BOM的UTF-8”,保存完再打开,中文就可以正常显示了。

4.2 自动设置格式

4.2.1 Python如何设置:

写文件

content = "你好"
with open("file.txt", "w", encoding="utf-8-sig") as f:
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值