在 Python 中使用混合 UTF-8 编码解码响应

Decoding response with mixed UTF-8 encoding in Python

我正在使用 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", "<") 还是有更优雅的解决方案?

您可以使用 'unicode-escape' codec 转换 unicode 部分,然后透明地重新编码为字节(latin-1 对此很方便,因为它提供了 1 对 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à'