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

使用psycopg2连接PostgreSQL时遭遇UnicodeDecodeError问题求助

问题描述

使用psycopg2连接PostgreSQL时触发UnicodeDecodeError,错误信息如下:

Traceback (most recent call last):
  File "c:\Users\ferre\Projects\PycharmProjects\Portal-de-Noticias\backend\user_registration\app.py", line 3, in <module>
    from noticias import noticias_bp
  File "c:\Users\ferre\Projects\PycharmProjects\Portal-de-Noticias\backend\user_registration\noticias.py", line 8, in <module>
    conn = psycopg2.connect(
           ^^^^^^^^^^^^^^^^^
  File "C:\Users\ferre\Projects\PycharmProjects\Portal-de-Noticias\.venv\Lib\site-packages\psycopg2\__init__.py", line 122, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 78: invalid continuation byte

连接代码片段:

import psycopg2
from flask import Blueprint, jsonify, request

noticias_bp = Blueprint('noticias', __name__)

# 数据库连接
conn = psycopg2.connect(
    dbname="portalDeNoticias",
    user="postgres",
    password="mk785",
    host="localhost",
    port='5432'
)
cur = conn.cursor()

其他位置的连接函数:

def connect_db():
    conn = psycopg2.connect(
        dbname="portalDeNoticias",
        user="postgres",
        password="mk785",
        host="localhost",
        port='5432'
    )
    return conn
问题分析与解决方案

这个错误是因为psycopg2在解析连接参数或与数据库通信时,遇到了无法用UTF-8解码的字节(0xe7对应拉丁1编码的ç字符),可能是系统环境编码不匹配、连接参数处理逻辑问题,或者数据库编码与客户端编码不一致导致的。以下是几种可行的解决方法:

1. 显式指定客户端编码

在连接时添加client_encoding='UTF8'参数,强制客户端使用UTF-8编码通信:

conn = psycopg2.connect(
    dbname="portalDeNoticias",
    user="postgres",
    password="mk785",
    host="localhost",
    port='5432',
    client_encoding='UTF8'
)

2. 使用DSN字符串替代关键字参数

部分场景下,关键字参数的编码处理可能存在问题,改用DSN字符串格式连接:

conn = psycopg2.connect("dbname=portalDeNoticias user=postgres password=mk785 host=localhost port=5432 client_encoding=UTF8")

3. 调整系统环境编码

如果是Windows系统,控制台默认编码可能不是UTF-8,可以尝试:

  • 设置系统环境变量PYTHONUTF8=1,强制Python使用UTF-8编码
  • 或者在代码开头添加编码配置(Python 3.7+支持):
import sys
sys.stdout.reconfigure(encoding='utf-8')
sys.stderr.reconfigure(encoding='utf-8')

4. 验证数据库编码设置

登录PostgreSQL数据库,检查目标数据库的编码:

SELECT datname, encoding FROM pg_database WHERE datname = 'portalDeNoticias';

如果数据库编码不是UTF8,可根据实际情况选择:

  • 连接时指定与数据库匹配的编码(比如client_encoding='LATIN1')
  • 备份数据后重新创建UTF8编码的数据库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:22:42