在Python中解码具有混合UTF-8编码的响应

3
我正在使用aiohttp从网站下载数据,但是我得到的响应是一个字节对象,我很难对其进行解码。 以下是我收到的响应示例。
b'\\r\\nLocalit\xc3\xa0' # Località
b'\\u003cdiv\\u003e12/09/2019\\u003c/div\\u003e\\r\\n' # <div>12/09/2019</div>

据我所知,文本使用正常的Unicode编码,HTML标签和换行符则使用转义的Unicode编码。如果我尝试使用"str(content, "utf-8")"解码,仍然会保留这种格式的HTML标签。

\u003cdiv \u003e12/09/2019\u003c/div\u003e\r\n

我应该为每个标签手动执行.replace("\u003", "<"),还是有更优雅的解决方案?
1个回答

2
您可以使用'unicode-escape' 编解码器来转换Unicode部分,然后再透明地重新编码为字节(Latin-1很方便,因为它提供了字节和字符之间的一对一对应关系),最后以'utf-8'解码:
b = b'\\u003cdiv\\u003e12/09/2019\\u003c/div\\u003e\\r\\n\\r\\nLocalit\xc3\xa0'
b.decode('unicode-escape').encode('latin1').decode('utf8')
# '<div>12/09/2019</div>\r\n\r\nLocalità'

如果我在文本上使用unicode-escape,我得到的是LocalitÃ而不是Località - Nicola
1
抱歉,我漏掉了那部分内容,我已经编辑了答案! - Thierry Lathuille

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接