Как исправить кириллические буквы не расшифровывая - PullRequest
0 голосов
/ 12 апреля 2019

Я отправляю запрос на сайт, анализирую данные и затем пытаюсь их вывести, но он выводит какую-то странную кодировку, и я не знаю, как это исправить.

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

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Ваш сервер, вероятно, отвечает с неправильной кодировкой.Вы можете проверить это с помощью 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 документация

0 голосов
/ 12 апреля 2019

Вывод, который вы получаете, представляет собой строку символов Unicode.Кодируйте тело в utf-8, чтобы получить строку байтов, затем расшифруйте ее:

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

Вывод:

Сдать.
...