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

使用pandas.to_csv导出Snowflake数据为csv时特殊字符乱码如何解决

乱码问题解决方案

你遇到的乱码是典型的编码不匹配导致的字符转义错误:原始Snowflake中的长破折号(–,Unicode U+2013)的UTF-8编码是0xE2 0x80 0x93,如果这段字节流被错误地用Latin-1/Windows-1252编码读取,三个字节就会被分别解析为â、€、“三个字符,也就是你看到的‚Äì序列。

你的代码存在两处编码未显式声明的隐患:

  1. pandas的to_csv方法在不同运行环境下默认编码不一定是UTF-8,Windows环境下默认会用GBK/CP1252编码写入
  2. 后续追加表头的open操作也没有指定编码,读写的编码规则和to_csv写入时的编码不匹配,就会触发乱码

修复方案

方案1:统一显式指定UTF-8编码(最通用,兼容S3、SFTP传输场景)

修改两处代码即可解决问题:

  • 给to_csv添加encoding参数显式指定编码
query_output.fetch_pandas_all().to_csv(file_name, index=False, quoting=csv.QUOTE_ALL,
                                       header=False, encoding='utf-8')
  • 给open操作也显式指定相同编码
with open(file_name, 'r+', encoding='utf-8') as f:

如果你的SFTP接收方要求用其他编码(比如GBK、适配Windows Office的UTF-8 BOM),可以直接替换上面的encoding参数值即可,比如需要给Windows系统用户打开的CSV可以传encoding='utf-8-sig'避免Office打开乱码。

方案2:优化表头写入逻辑(从根源降低编码出错概率)

你当前先写内容再追加表头的操作需要读写两次文件,会额外增加编码匹配风险,你可以直接在to_csv阶段就写入表头,省略后续修改文件的步骤:

# 直接提取表头列表传入to_csv
header_list = [col[0] for col in cur.description]
query_output.fetch_pandas_all().to_csv(file_name, index=False, quoting=csv.QUOTE_ALL,
                                       header=header_list, encoding='utf-8')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:45:03