Запросы Python: отправьте JSON в кодировке не utf-8 - PullRequest
0 голосов
/ 22 мая 2018

Я должен отправить данные в веб-службу, которая использует сервер MySQL, настроенный с использованием latin-1, в качестве сопоставления таблиц.Этот веб-сервис получает полезную нагрузку JSON и сохраняет некоторые данные в базе данных.UTF-8 - это правильная кодировка данных JSON для транспорта, но веб-служба неправильно кодирует их в latin-1 для сохранения в базе данных.

Таким образом, при отправке JSON, подобного {'Key': 'ç'}, веб-служба сохраняет его в неправильной кодировке и отображает на веб-странице мне как

"The value of Key is 'ç'"

Я ищу обходной путь.

Мой клиент работает на Python 3.5, и я использую библиотеку Requests , которая использует urllib3 в качестве сантехники.Когда я отправляю дикт в Requests, он использует json lib для преобразования его в строковый тип, а urllib3 представляет его в виде байтов для отправки запроса по сети.

Могу ли я сделать, чтобы запросы отправляли мою строку объекта JSON с кодировкой латинского алфавита-1?

1 Ответ

0 голосов
/ 22 мая 2018

Существует способ, которым вы можете вручную отправлять данные json:

a = {'Key': 'ç'}
data = json.dumps(a).encode("latin-1")
requests.post(url, data=data)

Тогда отправляемое вами содержимое представляет собой двоичную строку, кодированную latin-1.Затем вы можете декодировать его со стороны сервера:

res.body.decode("latin-1")
...