gpt4 book ai didi

python - Flask JSONEncoder 将 ensure_ascii 设置为 False

转载 作者:太空狗 更新时间:2023-10-30 00:49:11 25 4
gpt4 key购买 nike

我正在开发一个小型 flask 应用程序,我想在其中返回包含元音变音符的字符串(通常是德语特殊字符,例如“ß”)。由于 flask 中的默认 JSONEncoder 具有 ensure_ascii=True,这将始终转换我的字符串

Hauptstraße 213

为此:

Hauptstra\u00dfe 213

我的第一种方法是创建一个非常基本的自定义 JSONEncoder

class NonAsciiJSONEncoder(json.JSONEncoder):
def __init__(self, **kwargs):
super(NonAsciiJSONEncoder, self).__init__(kwargs)
self.ensure_ascii = False

如果我使用它,通过设置

app.json_encoder = NonAsciiJSONEncoder

我的 return jsonify(...) 实际上会返回包含 'ß' 的字符串。

但是,由于 ensure_ascii 是默认编码器的一个属性,我认为将其设置为 False

可能会更好
app.json_encoder.ensure_ascii = False

这实际上会将属性设置为 False,我在返回之前检查过。但不知何故,返回的字符串仍然没有 'ß' 但带有 \u00df

这怎么可能,就像我在自定义编码器中所做的那样,将此属性设置为 False

最佳答案

您在更改 app.json_encoder.ensure_ascii 时设置了 class 属性,这与 instance 属性不同。

JSONEncoder.__init__ method将实例属性设置为 True,因为这是 ensure_ascii 参数的默认值。设置类属性不会阻止 __init__ 方法设置实例属性,这里是实例属性。

您可以让您的子类将参数设置为 False:

class NonASCIIJSONEncoder(json.JSONEncoder):
def __init__(self, **kwargs):
kwargs['ensure_ascii'] = False
super(NonASCIIJSONEncoder, self).__init__(**kwargs)

关于python - Flask JSONEncoder 将 ensure_ascii 设置为 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32341363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com