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

Flask响应丢失字符串中不可打印字符问题求助

解决JSON响应中保留\x1d控制字符的问题

问题原因

\x1d是ASCII控制字符(分组分隔符GS),JSON规范仅支持有限的转义字符(如\n、\t、\"等),对于这类不在允许列表里的控制字符,Python的json模块默认序列化时会直接丢弃,导致返回的JSON中丢失该字符。而控制台打印时会保留原始字符(只是可能无法可视化显示),所以看起来正常。

解决方案

方案1:手动替换为JSON兼容的转义形式

直接把\x1d替换为JSON支持的Unicode转义序列\u001d(\x1d对应的Unicode码点是U+001D),示例代码:

import json

original_str = '\x1d0103671286378126378127812\x1d1232321102I009B\x1d71012321271'
# 将\x1d替换为JSON可识别的\u001d
processed_str = original_str.replace('\x1d', '\\u001d')
# 序列化生成JSON
json_output = json.dumps({"content": processed_str})
print(json_output)

序列化后的JSON会保留\u001d,接收方可以通过反向替换恢复原始字符。

方案2:自定义JSON编码器(通用处理所有控制字符)

如果字符串中还有其他类似的ASCII控制字符,自定义编码器可以批量处理所有不被JSON允许的控制字符:

import json

class ControlCharEncoder(json.JSONEncoder):
    def encode(self, obj):
        if isinstance(obj, str):
            escaped_chars = []
            for char in obj:
                char_code = ord(char)
                # 只保留JSON允许的控制字符,其余转成\uXXXX格式
                if 0x00 <= char_code <= 0x1F and char not in '\n\t\r\b\f':
                    escaped_chars.append(f'\\u{char_code:04x}')
                else:
                    escaped_chars.append(char)
            return '"' + ''.join(escaped_chars) + '"'
        # 非字符串类型沿用默认处理逻辑
        return super().encode(obj)

original_str = '\x1d0103671286378126378127812\x1d1232321102I009B\x1d71012321271'
# 使用自定义编码器序列化
json_output = json.dumps({"content": original_str}, cls=ControlCharEncoder)
print(json_output)

适配Flask的jsonify

如果用Flask框架的jsonify返回响应,只需替换应用的默认JSON编码器即可:

from flask import Flask, jsonify

app = Flask(__name__)

# 注册自定义编码器
app.json_encoder = ControlCharEncoder

@app.route('/get-data')
def get_data():
    original_str = '\x1d0103671286378126378127812\x1d1232321102I009B\x1d71012321271'
    return jsonify({"content": original_str})

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:32:06