Flask服务器控制台出现特殊字符输出,请求解析?[31m类字符含义
关于Flask日志中
?[31m这类特殊字符的解释 那些看起来像乱码的?[31m、?[1m、?[0m字符,其实是ANSI转义序列——这是一套用来控制终端文本颜色、字体样式的标准代码。
举几个常见的例子:
[31m:设置文本显示为红色[1m:设置文本为加粗样式[0m:重置所有格式,回到终端默认状态
Flask默认会给不同级别的日志添加这些颜色标记(比如错误日志用红色高亮),方便你在终端里快速区分日志类型。但问题出在你的当前终端环境不支持解析这些ANSI代码,导致转义序列直接以原始字符的形式显示出来,就变成了你看到的乱码(那个问号其实是不可打印的ESC转义字符的替代显示)。
解决方法
你可以从两个方向处理这个问题:
- 保留颜色输出:确保你的终端支持ANSI转义序列。比如Windows用户可以切换到Windows Terminal,或者开启CMD的VT100支持;Linux和macOS的终端一般默认就支持。
- 关闭颜色输出:如果不需要颜色,直接禁用Flask日志的颜色格式:
- 通过环境变量设置:启动Flask前执行
export FLASK_ENV=production(Linux/macOS)或者set FLASK_ENV=production(Windows),生产环境下Flask会自动关闭日志颜色。 - 通过代码配置:在你的Flask应用里手动修改日志格式,移除颜色相关的转义序列:
from flask import Flask import logging from logging import Formatter app = Flask(__name__) # 遍历所有日志处理器,替换为无颜色的格式 for handler in app.logger.handlers: handler.setFormatter(Formatter('%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'))
- 通过环境变量设置:启动Flask前执行
内容的提问来源于stack exchange,提问作者Евгений Федоров
相关产品推荐
相关产品推荐

