python csv 乱码
时间: 2024-12-27 07:22:04 浏览: 7
### Python 处理 CSV 文件时的编码问题
当使用 Python 进行 CSV 文件操作时,常见的乱码问题是由于字符集不匹配引起的。为了确保读取和写入过程中不会出现乱码,建议始终指定正确的编码方式。
#### 使用 `utf-8` 编码进行文件操作
对于简单的列表写入 CSV 文件的情况,可以通过设置合适的编码来避免乱码:
```python
ls = ['北京', '上海', '天津', '重庆']
with open('a.csv', 'w', encoding='utf-8') as f:
f.write(','.join(ls))
with open('a.csv', 'r', encoding='utf-8') as f:
content = f.read()
print(content)
```
然而,在某些情况下(特别是 Windows 平台),即使指定了 UTF-8 编码,Excel 打开这些文件时仍可能出现乱码。这是因为 Excel 默认期望带有 BOM 的 UTF-8 文件[^4]。
#### 使用带 BOM 的 `utf-8-sig` 编码
为了避免上述情况发生,应该采用 `utf-8-sig` 编码格式保存文件,这会在文件开头加入字节顺序标记 (BOM),使得像 Microsoft Excel 这样的应用程序能够正确识别文件编码:
```python
import csv
data = [['城市'], ['北京'], ['上海']]
with open('cities_with_bom.csv', mode='w', newline='', encoding='utf-8-sig') as file:
writer = csv.writer(file)
writer.writerows(data)
# 验证读取是否正常工作
with open('cities_with_bom.csv', mode='r', encoding='utf-8-sig') as file:
reader = csv.reader(file)
rows = list(reader)
for row in rows:
print(row)
```
通过这种方式,不仅可以防止命令行终端中的乱码现象,还能让其他软件如 Excel 正确解析含有中文字符的内容。
另外,如果是在 Linux 或 macOS 上运行程序,则通常只需要坚持使用标准的 `utf-8` 即可解决问题;而在 Windows 环境下则推荐优先考虑 `utf-8-sig` 来兼容更多应用工具的需求。
阅读全文