![](/img/trans.png)
[英]JSONDecodeError: Unexpected UTF-8 BOM: Display problems in bash?
[英]asyncio and GET: Unexpected UTF-8 BOM
我的 asyncio 驱动的 GET 请求程序今天给我出了问题,但仅限于它发出的某些 workItem 请求。
导致问题的不是特定的工作项。 我可以检索单个 workItem,然后再次运行相同的 function 并因错误而被拒绝:
Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column 1 (char 0)
触发错误的行是: workItem = await resp.json()
in this function:
async def getWorkItem(self, session, url):
async with session.get(url, headers=headers) as resp:
workItem = await resp.json() <----------------- the problem
workItem = pd.json_normalize(workItem['value'])
workItem.columns = workItem.columns.str.replace(
'fields.', '', regex=False)
return workItem
我该如何解决这个解码问题?
您可以在解码 json 之前删除BOM
,这是一个最小的示例:
测试.py:
import aiohttp
import asyncio
import json
async def main():
async with aiohttp.ClientSession() as session:
# async with session.get('http://127.0.0.1:9989/data.json') as resp:
async with session.get('http://127.0.0.1:9989/with_bom.json') as resp:
raw_text = await resp.text()
text_without_bom = raw_text.encode().decode('utf-8-sig')
work_items = json.loads(text_without_bom)
print(type(work_items))
print(work_items)
asyncio.run(main())
解释:
text()
替换json()
以获取原始文本。utf-8-sig
解码删除BOM
。json.loads()
将str
转换为dict
。上面的代码适用于有 BOM 或没有 BOM 的响应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.