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

从PostgreSQL取数经Pandas导出CSV后字符显示异常如何解决

CSV乱码问题解决方案

你遇到的’类乱码是典型的编码解析错误:UTF-8编码的文本被错误以Latin-1(ISO-8859-1)编码解析导致,可按以下步骤排查解决:

1. 修正psycopg2连接的编码配置

psycopg2默认未强制指定客户端编码,需要在建立数据库连接后显式设置,修改后的数据库查询代码如下:

# Try statement to catch SQL errors
try:
    with connect (
        database = 'postgres',
        user = security['DB_USER'],
        password = security['DB_PASS'],
        host = security['DB_HOST'],
        port = security['DB_PORT']
    ) as conn:
        # 新增行:显式设置客户端编码为UTF8
        conn.set_client_encoding('UTF8')
        with conn.cursor(name='cache_builder') as cursor:
            sql_object = sql.SQL(query).format(sql.Identifier('tweets'))
            cursor.itersize = 100000
            cursor.execute(sql_object)
            # 新增行:直接设置列名避免后续表头异常
            df_results = pd.DataFrame(cursor.fetchall(), columns=[desc[0] for desc in cursor.description])

except Exception as err:
    print(f'\n>>> SQL ERROR - {err}')

2. 修正CSV写入逻辑

无需手动调用open方法传递文件对象,直接使用pandas自带的编码参数,同时选择带BOM头的UTF-8编码,适配Windows平台办公软件的编码识别逻辑,修改后代码如下:

df_results.to_csv(save_path, sep=',', encoding='utf-8-sig')

3. 验证排查

保存文件前先打印DataFrame的部分内容:

print(df_results.sample(5))

如果打印结果已经存在乱码,说明问题出在数据读取环节,检查PostgreSQL服务端的表编码配置;如果打印结果正常,打开CSV时手动指定用UTF-8编码打开即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:12:01