该问题通常出现在使用asyncio和GET请求时,在请求头中设置了Content-Type为application/json且在请求内容中包含BOM(Byte Order Mark)的UTF-8字符编码时会发生。这会导致异步请求无法正常解析数据。
解决此问题的方法是在请求头中将Content-Type设置为application/json;charset=utf-8,而不是仅设置为application/json,以确保后端正确识别编码。还可以使用Python自带的codecs解决BOM问题。示例如下:
import codecs
import aiohttp
import json
async def fetch_json(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
content = await response.read()
# 利用codecs将BOM去除
content = codecs.decode(content, 'utf-8-sig')
data = json.loads(content)
return data