从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
相关产品推荐
相关产品推荐

