You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Astropy:含特殊符号的CSV转FITS时出现编码错误

解决CSV含特殊符号写入FITS时的ASCII编码错误

问题出在两个核心环节:一是读取CSV时未明确指定UTF-8编码,导致α这类特殊字符未被正确解析;二是FITS默认使用ASCII编码写入字符串列,无法处理非ASCII字符。以下是具体解决步骤:

步骤1:正确读取UTF-8编码的CSV

读取CSV时必须显式指定encoding='utf-8',确保特殊字符被正确加载:

from astropy.table import Table
from astropy.io import fits

# 读取CSV,指定UTF-8编码
table = Table.read('source_file.csv', format='csv', encoding='utf-8')

步骤2:转换字符串列为Unicode类型

Astropy Table默认可能将字符串列设为ASCII字节类型(dtype='S'),需要转换为支持UTF-8的Unicode类型(dtype='U'):

# 遍历所有列,转换ASCII字节列为Unicode
for col_name in table.colnames:
    col = table[col_name]
    if col.dtype.kind == 'S':
        table[col_name] = col.astype('U')

步骤3:写入FITS时指定UTF-8编码

写入FITS文件时,通过output_encoding='utf-8'参数指定输出编码,覆盖默认的ASCII设置:

# 写入FITS,允许覆盖已有文件并指定UTF-8编码
fits.writeto('target_file.fits', table, overwrite=True, output_encoding='utf-8')

备选方案:用Pandas读取后转Astropy Table

如果Astropy的CSV读取仍有问题,可以用Pandas先读取CSV,再转换为Astropy Table:

import pandas as pd

# Pandas读取CSV,天然支持UTF-8
df = pd.read_csv('source_file.csv', encoding='utf-8')
# 转换为Astropy Table
table = Table.from_pandas(df)

# 写入FITS,同样指定UTF-8编码
fits.writeto('target_file.fits', table, overwrite=True, output_encoding='utf-8')

关键说明

  • FITS标准现在支持UTF-8字符串,但需要显式开启,否则默认会强制使用ASCII编码,导致非ASCII字符编码失败。
  • 必须确保读取和写入环节都统一使用UTF-8编码,避免中间环节出现字符乱码或编码错误。

内容的提问来源于stack exchange,提问作者GreGS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:05:25