Law*_*son 5 python encoding json flask python-2.7
我正在研究一个小瓶子应用程序,我想在其中返回包含变音符号的字符串(通常是德语特殊字符,例如'ß').作为JSONEncoder
flask中的默认值ensure_ascii=True
,这将始终转换我的字符串
Hauptstraße 213
Run Code Online (Sandbox Code Playgroud)
对此:
Hauptstra\u00dfe 213
Run Code Online (Sandbox Code Playgroud)
我的第一个方法是创建一个非常基本的习惯 JSONEncoder
class NonAsciiJSONEncoder(json.JSONEncoder):
def __init__(self, **kwargs):
super(NonAsciiJSONEncoder, self).__init__(kwargs)
self.ensure_ascii = False
Run Code Online (Sandbox Code Playgroud)
如果我使用它,通过设置
app.json_encoder = NonAsciiJSONEncoder
Run Code Online (Sandbox Code Playgroud)
我return jsonify(...)
将实际返回包含'ß'的字符串.
但是,正如ensure_ascii
默认编码器的属性一样,我认为通过将其设置为更改它可能会更好False
app.json_encoder.ensure_ascii = False
Run Code Online (Sandbox Code Playgroud)
这实际上将属性设置为False,我在返回之前检查了它.但不知何故,字符串仍然返回没有'ß'但是\u00df
.
这怎么可能,正如我在自定义编码器中所做的那样,将此属性设置为False
?
您在更改时设置类属性app.json_encoder.ensure_ascii
,这与实例属性不同.
该JSONEncoder.__init__
方法将实例属性设置为True
,因为这是ensure_ascii
参数的默认值.设置class属性不会阻止__init__
方法设置实例属性,而是在此处获胜的实例属性.
你可以让你的子类将参数设置为False
:
class NonASCIIJSONEncoder(json.JSONEncoder):
def __init__(self, **kwargs):
kwargs['ensure_ascii'] = False
super(NonASCIIJSONEncoder, self).__init__(**kwargs)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1216 次 |
最近记录: |