0
Fixed

Проблема с кодировкой

Anonymous 3 years ago in Стандартизация • updated by Петр Ильичев 1 year ago 19
Добрый день.
Помогите разобраться с неправильной кодировкой ответа сервера.

Есть код на 1С:

WinHttp=СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"utf-8");
WinHttp.Open("POST","https://dadata.ru/api/v2/clean/address",0);

WinHttp.SetRequestHeader("Content-Type", "application/json");
WinHttp.setRequestHeader("Authorization", "Token <мой>");
WinHttp.setRequestHeader("X-Secret", "<секретный ключ>");

ПараметрыПОСТ = "[""" + СокрЛП(АдресСтрока) + """]";

WinHttp.Send(ПараметрыПОСТ);


Проверяется адрес из примера:
мск сухонска 11/-89

Возвращается ответ:
[{"source": "??N??? N?N?N?????N????° 11/-89", "result": "? ??N?N???N?, ?? ????N??????°, N??» ??N?N?????N????°N?, ?? 11, ???? 89", "postal_code": "127642", "country": "? ??N?N???N?", "region_type": "??", "region_type_full": "????N?????", "region": "????N??????°", "area_type": null, "area_type_full": null, "area": null, "city_type": null, "city_type_full": null, "city": null, "settlement_type": null, "settlement_type_full": null, "settlement": null, "street_type": "N??»", "street_type_full": "N??»??N??°", "street": "??N?N?????N????°N?", "house_type": "??", "house_type_full": "??????", "house": "11", "block_type": null, "block_type_full": null, "block": null, "flat_type": "????", "flat": "89", "postal_box": null, "kladr_id": "7700000000028360004", "fias_id": "5ee84ac0-eb9a-4b42-b814-2f5f7c27c255", "okato": "45280583000", "oktmo": "45362000", "tax_office": "7715", "tax_office_legal": null, "flat_area": null, "square_meter_price": null, "flat_price": null, "timezone": "UTC+3", "geo_lat": "55.8782209", "geo_lon": "37.6538577", "qc_geo": 0, "qc_complete": 0, "qc_house": 2, "qc": 0, "unparsed_parts": null}]

Т.е. передаваемый адрес сервер явно распознал...только вернул неудобоваримую информацию.
Подскажите, что и где я упустил? Как побороть крокозябры?

Заранее премного благодарен!
Under review
Добрый день! Какая у вас версия 1С?
Создайте функцию:
Функция Перекодировать(Текст, КодировкаИз, КодировкаВ)
    stream = СоздатьОбъект("ADODB.Stream");
    stream.Type = 2; 
    stream.Mode = 3; 
    stream.charset = КодировкаИз; 
    stream.Open(); 
    stream.WriteText(Текст); 
    stream.Position = 0; 
    stream.charset = КодировкаВ; 
    Рез = stream.ReadText(-1); 
    stream.Close();
    Возврат Рез
КонецФункции
И в вашем коде вызовите ее:
...
WinHttp.Send(ПараметрыПОСТ);
Рез = Перекодировать(WinHttp.ResponseText(), "ISO-8859-1", "UTF-8");
Пока не получается...
Выдает ошибку:
Рез = stream.ReadText(-1);
 Provider: Параметр задан неверно.
Пожалуйста, приведите ваш код полностью.
А где заполняется значение переменной АдресСтрока?
это реквизит формы ввода, его значение =
мск сухонска 11/-89

У меня ваш код работает на 1С 8. К сожалению, нет 1С 7.7, чтобы воспроизвести эту ошибку. А скачать ее уже невозможно.
Пока не получается. А если даже удастся получить ответ в правильной кодировке, что вы будете с ним делать? Это JSON-объект, как распарсить его средствами 1С?
Это я смогу без проблем)
Мне только кодировку побороть нужно...
Добрый день.
Есть какой-нибудь прогресс в нашем вопросе?
К сожалению, нет.
Плохо...а надеяться можно в ближайшее время? Или данная задача отложена?



Сделал через вспомогательный объект MSScriptControl и сохранение в промежуточный файл. Работает медленно.

Внешняя обработка с примером. Пароль на архив — ваш секретный ключ.
аллилуйа!
скорость приемлемая...
большое спасибо за помощь!

Пожалуйста!

аналогичная проблема, подскажите решение?

Только такое же, как предыдущему комментатору ツ
https://send.firefox.com/download/e0cb6c709a/#DmVtorSSY9IYRCnA0uutcw