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

Flask服务器控制台出现特殊字符输出,请求解析?[31m类字符含义

关于Flask日志中?[31m这类特殊字符的解释

那些看起来像乱码的?[31m、?[1m、?[0m字符,其实是ANSI转义序列——这是一套用来控制终端文本颜色、字体样式的标准代码。

举几个常见的例子:

  • [31m:设置文本显示为红色
  • [1m:设置文本为加粗样式
  • [0m:重置所有格式,回到终端默认状态

Flask默认会给不同级别的日志添加这些颜色标记(比如错误日志用红色高亮),方便你在终端里快速区分日志类型。但问题出在你的当前终端环境不支持解析这些ANSI代码,导致转义序列直接以原始字符的形式显示出来,就变成了你看到的乱码(那个问号其实是不可打印的ESC转义字符的替代显示)。

解决方法

你可以从两个方向处理这个问题:

  • 保留颜色输出:确保你的终端支持ANSI转义序列。比如Windows用户可以切换到Windows Terminal,或者开启CMD的VT100支持;Linux和macOS的终端一般默认就支持。
  • 关闭颜色输出:如果不需要颜色,直接禁用Flask日志的颜色格式:
    1. 通过环境变量设置:启动Flask前执行export FLASK_ENV=production(Linux/macOS)或者set FLASK_ENV=production(Windows),生产环境下Flask会自动关闭日志颜色。
    2. 通过代码配置:在你的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]'))
      

内容的提问来源于stack exchange,提问作者Евгений Федоров

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:14:10