Имя: Пароль:
1C
1C 7.7
v7: Знаки вопросов вместо русских букв при чтении результата запроса.
0 Румата
 
08.10.20
11:48
OC Windows 7, в  региональных стандартах Язык программ не поддерживающих unicod: стоит "Русский", в реестре "1250" имеет значение "c_1251.nls", "1252" имеет значение "c_1251.nls".


Отправляю запрос по API :

пОбъект=СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
пОбъект.Option(2,"utf-8"); // пробовал и windows-1251
...
=====================

В результате подучают ответ, читаю его, вместо русских букв "УТ", приходит "????". Как с этим бороться, помогите пожалуйста.
1 Румата
 
08.10.20
12:01
Самое интересное что букв русских две в исходном тексте "УТ", а при чтении получается4-и вопроса "????". Мистика.
2 Bigbro
 
08.10.20
12:04
ну раскодируй сам утф строку, что такого.
3 Румата
 
08.10.20
12:08
(2) Пробовал https://helpf.pro/faq/view/495.html
Не получается.
4 Bigbro
 
08.10.20
12:10
а что получается? по кодам символов то посмотри, сравни с таблицами УТФ, может там не УТФ-8 а УТФ-7 или еще какая то экзотика.
5 acht
 
08.10.20
12:11
(0) Печалька. Никто не хочет читать документацию. Все механики-водители БТР первого года обучения бросаются кодить не понимая что делают вообще.

пОбъект.Option(2,"utf-8") ставит кодировку урла. На кодировку ответа влияет чуть меньше, чем никак.

(1) > а при чтении получается4-и вопроса "????". Мистика.
А что ты хотел от русских букв в уникоде? Один символ?

Поставь заголовок, что ты accept только charset какой надо. И скажи спасибо серверу, что он в тебя каким-нибудь gunzipом не плюнул.
6 Румата
 
08.10.20
12:11
(4) Код символа первого вопроса равен 63 и таких символов подряд 4-и, вместо 2-х в изначальной строке.
7 Bigbro
 
08.10.20
12:16
https://unicode-table.com/ru/0423/
63 63 63 63 - это не уникодовская "У", надо читать манула что тебе АПИ возвращщает и в какой кодировке.
8 acht
 
08.10.20
12:19
(7) Кодировка портится в момент передачи строки в переменную 1С.
Хочешь конвертировать вручную - пиши кусок кода на vbs, там обрабатывай всю работу с WinHttp, а в 1С заворачивай это все в ScriptingControl
9 Румата
 
08.10.20
12:35
Блин, а нет каких-нибудь параметров, чтобы ответ пришел в читаемой кодировке, без использования vbs ?
10 Ненавижу 1С
 
гуру
08.10.20
12:37
(0) это из 7.7 выполняется? так там нет юникода
11 Румата
 
08.10.20
12:41
(10) Это не поможет ? http://catalog.mista.ru/public/69136/
12 Bigbro
 
08.10.20
12:44
(9) перечитай (5) последние 2 предложения.
13 Румата
 
08.10.20
12:47
(12) Заголовок запроса надо изменить ? Если честно, не понял, что автор хотел сказать (
14 Румата
 
08.10.20
12:49
(12) Что-то типа этого :
пОбъект.setRequestHeader(\"Content-Type\",\"application/xml; charset=Windows-1251\");
15 Румата
 
08.10.20
12:50
(12) У меня сейчас вот такой код :

    пОбъект.Open("POST",УРЛСтрокаМетода,0);
    пОбъект.setRequestHeader("Host",УРЛСтрока);
    пОбъект.setRequestHeader("Client-Id",ClientId);
    пОбъект.setRequestHeader("Api-Key",СокрЛП(APIKEY));
    пОбъект.setRequestHeader("Content-Type","application/json");  
    ТекстЗапросаДжейСон = "{}";  
    пОбъект.Send(СокрЛП(ТекстЗапросаДжейСон));
16 acht
 
08.10.20
12:56
(14) Content-Type - это описание того, что ты передаешь. Того, что находится в теле твоего запроса. Чтобы повлиять на ответ сервера:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Charset
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding

Все три. Чтобы в тебя плевали тем, что ты действительно понимаешь.
17 Румата
 
08.10.20
12:59
(16) Спасибо, но я до сих пор не могу понять, где ты стебешься, а где помогаешь ))))
Буду пробовать )
18 trad
 
08.10.20
13:05
(17) тогда по умолчанию считай, что везде помогает