如何修复西里尔字母不解码

问题描述 投票:0回答:2

我向网站发送请求,解析数据,然后尝试输出它,但它输出一些奇怪的编码,我不知道如何解决它。

body_clean = re.search('"body_clean": "', r.text)
body_clean1 = re.search('", "attachments', r.text)
body = r.text[body_clean.end():body_clean1.start()]
print (body)

我需要输出:

Сдать после каникул, 15 апреля.&;Убедительная просьба оформлять решение &;как положено&; в соответствии с тем &;как учили&;, а не так, будто бы вы его на коленке за 5 минут перед сдачей делали. Писать разборчиво и аккуратно.

但我得到了输出

\u0421\u0434\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u043d\u0438\u043a\u0443\u043b, 15 \u0430\u043f\u0440\u0435\u043b\u044f. \r\n\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0441\u044c\u0431\u0430 \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 "\u043a\u0430\u043a \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e" \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0442\u0435\u043c "\u043a\u0430\u043a \u0443\u0447\u0438\u043b\u0438", \u0430 \u043d\u0435 \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u0431\u044b \u0432\u044b \u0435\u0433\u043e \u043d\u0430 \u043a\u043e\u043b\u0435\u043d\u043a\u0435 \u0437\u0430 5 \u043c\u0438\u043d\u0443\u0442 \u043f\u0435\u0440\u0435\u0434 \u0441\u0434\u0430\u0447\u0435\u0439 \u0434\u0435\u043b\u0430\u043b\u0438. \u041f\u0438\u0441\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440\u0447\u0438\u0432\u043e \u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e.

UPD:

试过这段代码,获得相同的输出

encoded = body.encode("utf-8")
        decoded = str(encoded,'utf-8')
        print(decoded)

从中解析数据的页面信息:

HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Fri, 12 Apr 2019 11:47:09 GMT
Content-Type: application/json
python-3.x decoding
2个回答
0
投票

您获得的输出是一串unicode字符。在utf-8中编码主体以获取字节字符串,然后对其进行解码:

body = "\u0421\u0434\u0430\u0442\u044c."
encoded = body.encode("utf-8")
decoded = str(encoded,'utf-8')
print(decoded)

输出:

Сдать.

0
投票

您的服务器可能响应错误的编码。你可以用r.encoding查看。当您访问响应的requests属性时,.text正在使用它。

您可以使用utf-8手动将编码更改为r.encoding = "utf-8",然后访问.text属性。

r.encoding = "utf-8"

# Now r.text shoud be fine
body_clean = re.search('"body_clean": "', r.text)
body_clean1 = re.search('", "attachments', r.text)
body = r.text[body_clean.end():body_clean1.start()]
print (body)

requests documentation

© www.soinside.com 2019 - 2024. All rights reserved.