记录一次flask中遇到的编码问题

当时的场景大概如下,就是一个简单的查询,然后查看model实例的to_dict()结果

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy_serializer import SerializerMixin
from datetime import datetime
import setting

app = Flask(__name__)
app.config.from_object(setting)
db = SQLAlchemy(app)


class Blog(db.Model, SerializerMixin):
    __tablename__ = "tb_blog"
    serialize_rules = []
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    shop_id = db.Column(db.Integer, nullable=False)
    user_id = db.Column(db.Integer, nullable=False)
    name = db.Column(db.String(50), nullable=False, name='title')
    images = db.Column(db.String(200), nullable=True)
    content = db.Column(db.Text, nullable=True)
    liked = db.Column(db.Integer, default=1)
    comments = db.Column(db.Integer, default=0)
    createTime = db.Column(db.DateTime, default=datetime.now, name="create_time")
    updateTime = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now, name="update_time")


@app.route('/')
def hello_world():  # put application's code here
    blog = Blog.query.get(4)
    print(blog.to_dict())
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

就这样一个简单的业务逻辑,万万想不到竟然也会出错 UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\U0001f352’ in position 152: illegal multibyte sequence

这段错误说的是gbk编码器不能编码’\U0001f352’这段unicode字符,这是因为python控制台输出默认用的是window的命令行窗口,格式为gbk,而表情包不能用gbk编码

其中我的mysql使用的是utf8mb4_general_ci编码,然后其中Blog.title就有几条数据大概是像 红酒杯🍷战斧牛排🥩 这种带有表情包的

解决方法是

  1. 不要直接点击pycharm的运行,因为这样就是默认使用window的命令行输出,而是通过在pycharm的终端(默认为PowerShell,是utf-8编码)运行启动文件

  2. 或者不输出任何东西,这样也不会报错。

这里其实我有一个疑问,就是如果我在另一个文件中单独引用上下文这样输出就不会出问题,遇到大佬希望能给解答,多谢!!!

from app import app
from model import Blog
with app.app_context():
    blog = Blog.query.get(4)
    print(blog.to_dict())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值