Кодировка русских символов в ответе на HTTP запрос python3

Я делаю запрос с помощью HTTPSConnection и в ответе вместо русских символов получаю чары.

Делаю запрос и паршу его таким образом

import http.client
import mimetypes
conn = http.client.HTTPSConnection("***.ru")
dataList = []
boundary = 'wL36Yn8afVp8Ag7AmP8qZ0SA4n1v9T'
dataList.append('--' + boundary)
dataList.append('Content-Disposition: form-data; name=json;')

dataList.append('Content-Type: {}'.format('multipart/form-data'))
dataList.append('')

dataList.append("someJSON")
dataList.append('--'+boundary+'--')
dataList.append('')
body = '\r\n'.join(dataList)
payload = body
headers = {
  '****'
}
conn.request("POST", "/****", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode('utf-8'))

Ответ получается типо такого

 {
    "status": 200,
    "data": {
        "someobject": [
            {
                "id": 319,
                "name": "\u0410\u043a\u0446\u0438\u044f",
            }
     }
}

Как правильно обработать кирилицу для вывода и операций над ней (сравнения например s == "привет")?


Ответы (2 шт):

Автор решения: Gordon

Есть соглашение что юникодные символы использующие в URL перед отправкой/получением преобразуются по правилам процентного кодирования. Современные браузеры позаботятся о проблемах отображения сделают их удобочитаемыми. Значит

"name": "\u0410\u043a\u0446\u0438\u044f",

лучше хранить в формате процентного кодирования

Но можно использовать и так, перед отправкой используй decode(). http.client должен понимать такие адреса

→ Ссылка
Автор решения: gil9red

Просто разберите ответ через json.loads, получите в name текст Акция:

import json
import http.client
import mimetypes

conn = http.client.HTTPSConnection("***.ru")
dataList = []
boundary = 'wL36Yn8afVp8Ag7AmP8qZ0SA4n1v9T'
dataList.append('--' + boundary)
dataList.append('Content-Disposition: form-data; name=json;')

dataList.append('Content-Type: {}'.format('multipart/form-data'))
dataList.append('')

dataList.append("someJSON")
dataList.append('--'+boundary+'--')
dataList.append('')
body = '\r\n'.join(dataList)
payload = body
headers = {
  '****'
}
conn.request("POST", "/****", payload, headers)
res = conn.getresponse()
data = json.loads(res.read())      # <<<<<<<<<<<<<<<<<<<<<<<<<
print(data)
→ Ссылка