启动Django本地服务器时遭遇UnicodeDecodeError错误求助
Django启动时UnicodeDecodeError问题解决(PostgreSQL连接场景)
问题描述
执行python manage.py runserver或python manage.py runserver 127.0.0.1:8080时触发以下错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc2 in position 55: invalid continuation byte
错误栈显示问题根源在psycopg2连接PostgreSQL的环节,且执行SELECT version()返回乱码内容,此前修改Windows用户名未解决问题。
使用技术栈:
- Python 3.11.5
- Django 4.2.4
- PostgreSQL 15.4(64位,Windows环境)
解决方案
1. 强制指定数据库连接编码
在Django项目的settings.py中,为数据库配置添加OPTIONS指定客户端编码为UTF8:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': '你的数据库名称', 'USER': '你的数据库用户', 'PASSWORD': '你的数据库密码', 'HOST': '127.0.0.1', 'PORT': '5432', 'OPTIONS': { 'client_encoding': 'UTF8', }, } }
2. 调整PostgreSQL全局编码配置
找到PostgreSQL安装目录下data文件夹中的postgresql.conf,修改以下参数:
client_encoding = 'UTF8' default_encoding = 'UTF8'
修改完成后重启PostgreSQL服务。
3. 验证并修复数据库编码
登录PostgreSQL命令行,执行以下命令检查编码:
-- 查看所有数据库的编码 SELECT datname, encoding FROM pg_database; -- 查看目标用户的编码配置 SELECT usename, useconfig FROM pg_user WHERE usename = '你的数据库用户';
如果目标数据库编码不是UTF8,需重新创建数据库并指定编码:
CREATE DATABASE 你的数据库名称 WITH ENCODING 'UTF8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8' TEMPLATE template0;
4. 解决Windows系统编码冲突
在Windows环境中,可通过设置环境变量强制Python使用UTF8编码:
- 临时生效:启动命令行后执行
set PYTHONUTF8=1,再运行python manage.py runserver - 永久生效:在系统环境变量中添加
PYTHONUTF8=1(用户变量或系统变量均可)
内容的提问来源于stack exchange,提问作者new_progger_python
相关产品推荐
相关产品推荐

