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

导出CSV时特殊字符‘–’丢失求助:尝试utf-8等编码无效

解决CSV导出时特殊短破折号丢失问题

先查读取环节,别只盯着导出

问题大概率不在导出,而是读取a.xlsx时,特殊短破折号(–,不是普通的-)就没被正确解析。试试用openpyxl引擎读取,它对xlsx格式的特殊字符支持更好:

import pandas as pd
df = pd.read_excel('a.xlsx', engine='openpyxl')

如果是xls格式,改用xlrd(注意xlrd 2.0及以上版本不支持xlsx,要对应版本安装)。

调整导出参数,针对性解决

  1. 用带BOM的UTF-8编码:Windows下很多工具(比如Excel)识别UTF-8文件需要BOM,否则特殊字符可能显示异常:
df.to_csv('output.csv', encoding='utf-8-sig')
  1. 明确分隔符和引号规则,避免特殊字符被误处理:
df.to_csv('output.csv', encoding='utf-8-sig', sep=',', quotechar='"', quoting=pd.io.common.csv.QUOTE_NONNUMERIC)
  1. 先确认DataFrame里有没有这个字符:如果导出后丢失,先检查读取后的DataFrame里是否存在该字符,排除读取问题:
# 检查目标列是否包含短破折号
print(df['你的目标列名'].str.contains('–').any())
# 查看包含该字符的行内容
print(df.loc[df['你的目标列名'].str.contains('–'), '你的目标列名'])

备选:替换特殊字符

如果上述方法都没用,直接把DataFrame里的特殊短破折号替换成普通破折号,或者用更稳定的编码导出:

# 替换为普通破折号
df['你的目标列名'] = df['你的目标列名'].str.replace('–', '-')
# 或者用UTF-16加制表符分隔,避免编码冲突
df.to_csv('output.csv', encoding='utf-16', sep='\t')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:45:34