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

时间:2019-04-12 11:03:56

标签: python-3.x decoding

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

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.

更新:

尝试过此代码,获得相同的输出

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

2 个答案:

答案 0 :(得分:0)

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

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

输出:

Сдать.

答案 1 :(得分: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