显式指定UTF-8编码保存的CSV文件打开仍显示cp1252编码是什么原因
原因说明
- 你当前的「文件编码检测逻辑」存在根本错误:打印
open()返回的文件对象得到的encoding属性,不是文件实际的存储编码,只是Python读取文件时使用的解码规则。 - Python 3 中调用
open()方法如果不显式传入encoding参数,会自动采用当前操作系统的默认编码作为解码规则,Windows系统的默认编码就是cp1252,这就是你看到对应输出的原因,和你写入文件时指定的utf-8编码没有冲突。 pandas.to_csv()指定encoding='utf-8'后,文件确实会以utf-8格式存储,你看到的输出只是读取环节的默认参数导致的,不代表文件存储编码有误。
验证方案
你可以通过两种方式验证文件的实际存储编码:
- 读取时显式指定utf-8编码,若可以正常读取无乱码,说明存储编码与指定的编码一致:
# 显式指定解码编码为utf-8 with open(filename, encoding='utf-8') as f: content = f.read()
- 读取二进制文件内容后用编码检测工具判断,例如用chardet库:
import chardet # 二进制读取文件原始内容 with open(filename, 'rb') as f: raw = f.read() print(chardet.detect(raw))
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

