Кодировка русских символов в ответе на 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 шт):
Есть соглашение что юникодные символы использующие в URL перед отправкой/получением преобразуются по правилам процентного кодирования. Современные браузеры позаботятся о проблемах отображения сделают их удобочитаемыми. Значит
"name": "\u0410\u043a\u0446\u0438\u044f",
лучше хранить в формате процентного кодирования
Но можно использовать и так, перед отправкой используй decode(). http.client должен понимать такие адреса
Просто разберите ответ через 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)