使用scintools的Dynspec读取FITS文件时出现编码错误求助
解决scintools Dynspec读取FITS文件时的编码解码错误
问题重现
使用scintools模块的Dynspec类读取FITS文件查看动态频谱,执行以下代码:
dyn=Dynspec( filename="B1133+16_bm4_pa_750_200_16_12mar2018.raw.2.dspec.fits", process=False )
出现错误:'charmap' codec can't decode byte 0x90 in position 2985: character maps to <undefined>,尝试二进制读取、添加encoding='utf-8'均无效。
解决方案
- 修改源码编码设置:找到scintools中读取FITS文件头的代码,将文件打开时的编码改为
latin-1(该编码能兼容所有字节,适配FITS头中的非标准ASCII字符)。例如把open(filename, 'r')替换为open(filename, 'r', encoding='latin-1')。 - 通过astropy预读取后传入:绕过scintools的文件读取逻辑,先用astropy读取FITS数据和头信息,再传入
Dynspec:from astropy.io import fits from scintools.dynspec import Dynspec hdul = fits.open("B1133+16_bm4_pa_750_200_16_12mar2018.raw.2.dspec.fits") dyn = Dynspec(data=hdul[0].data, header=hdul[0].header, process=False) - 检查文件完整性:用专业FITS工具(如DS9)打开目标文件,确认文件未损坏、头信息格式正常。
内容的提问来源于stack exchange,提问作者Phy_crazy
相关产品推荐
相关产品推荐

