при вводе ensure_ascii=False выдаёт ошибку, headers и json_data заполнены, тут пусты для примера

headers = {}

json_data = {

}

response = requests.post('https://p2p.binance.com/bapi/c2c/v2/friendly/c2c/adv/search', headers=headers, json=json_data)

with open("BinUSD.json", "w") as file:

    json.dump(response.json(), file, indent=4, ensure_ascii=False)
    print(file)

введите сюда описание изображения


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

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

1 вариант: указывать кодировку utf-8 при записи файла - это гарантирует, что любой юникодный символ как есть запишется в файл:

with open("BinUSD.json", "w", encoding="utf-8") as file:
    json.dump(response.json(), file, indent=4, ensure_ascii=False)

2 вариант: брать из ответа поле content (ответ в байтовом виде), записывать в файл в бинарном режиме. В этом случае не нужно будет вообще заботиться о кодировках, это просто сохранит пришедшие с сервера данные как есть.

with open("BinUSD.json", "wb") as file:
    file.write(response.content)

Это конечно не декодирует юникодные символы (в том числе кириллицу), если они исходно были в json в экранированном виде (как при конвертировании в json с параметром ensure_ascii=True), и не отформатирует json.

→ Ссылка