如何避免Content-Type中的charset = utf-8?

时间:2017-03-30 10:43:34

标签: python json aiohttp

返回JSON数据作为回应是常见的情况,aiohttp.web提供了返回JSON的快捷方式 - aiohttp.web.json_response()

def handler(request):
    data = {'some': 'data'}
    return web.json_response(data)

快捷方法返回aiohttp.web.Response实例,因此我们可以在从处理程序返回之前设置cookie。

但我的curl请求会返回Content-Type: application/json; charset=utf-8,但我只需要application/json,如何避免charset=utf-8

1 个答案:

答案 0 :(得分:1)

为什么要避免在内容类型中使用charset=utf-8?如果您未指定,则从W3C开始,回退(默认值)将为ISO-8859-1

您的问题的实际答案:当前的aiohttp版本不支持使用json_response快捷方式功能更改字符集。即使直接使用aiohttp.web.Response而未指定字符集,也会将charset=utf8添加到回复的 Content-Type 中。您可以更改charset但不要忽略它(除非text的{​​{1}}参数设置为)。

要使用aiohttp.web.Response.__init__ 更改字符集,您可以执行以下操作:

json_response

或使用web.json_response( data, content_type=None, headers={aiohttp.hdrs.CONTENT_TYPE: 'application/json; charset=ISO-8859-1'}, ) 每次都不要重复这个冗长的函数调用:

functools.partial

您可以查看my_json_resp = partial( web.json_response, content_type=None, headers={aiohttp.hdrs.CONTENT_TYPE: 'application/json; charset=ISO-8859-1'}, ) # later in your app return my_json_resp(data) herejson_response here的来源,亲自查看。