Python打开Fluke SmartView导出的CSV文件出现乱码如何解决
问题原因
你遇到的乱码是编码不匹配导致的:
- Fluke SmartView导出的CSV默认使用
UTF-16 LE(小端UTF-16)编码,文件开头的ÿþ就是该编码的BOM(字节顺序标记),每个可见字符后跟随的\x00是UTF-16用2字节存储ASCII字符的典型特征。 - 直接调用
open()时Python默认使用系统默认编码(通常为GBK/UTF-8)解码,解码规则不匹配就会输出乱码。 - 你用Excel打开另存的操作,实际是Excel自动将文件编码转换为了常用的ANSI/UTF-8编码,因此后续读取就恢复正常。
解决方案
不需要提前通过Excel转码,直接在打开文件时指定正确的编码即可正常读取:
方法1:直接指定编码读取
将原有代码修改为如下格式即可:
import csv g = 'datos/1.81/IR20211103_2275.csv' # 仅需新增encoding参数指定为utf-16即可正常解码 with open(g, "r", newline="", encoding="utf-16") as f: # 直接读取全行 lines = f.readlines() print(lines) # 如需使用csv.reader读取也可正常运行 # reader = csv.reader(f) # for row in reader: # print(row)
方法2:不确定编码时的通用处理
如果后续遇到其他编码不明确的文件,可以用chardet库自动检测编码:
- 先安装依赖库:
pip install chardet - 检测编码并读取的代码如下:
import chardet import csv g = 'datos/1.81/IR20211103_2275.csv' # 先读取部分字节检测编码 with open(g, 'rb') as f: raw_data = f.read(10000) # 读取前10KB内容足够完成编码检测 result = chardet.detect(raw_data) encoding = result['encoding'] # 用检测到的编码读取文件 with open(g, "r", newline="", encoding=encoding) as f: lines = f.readlines() print(lines)
内容的提问来源于stack exchange,提问作者jRortma
相关产品推荐
相关产品推荐

