Имя: Пароль:
1C
1С v8
Кодировка в HTTP запросах
0 Peltik
 
21.02.21
16:36
Написал для пробы в 8.3 небольшой HTTP-сервис, в ответ кодировку выставляю вот так

Ответ.УстановитьТелоИзСтроки(Результат,КодировкаТекста.ANSI);

пытаюсь из 7.7 получить, всё ОК, кроме русских букв, вместо них ?????

        WinHTTP = СоздатьОбъект("MSXML2.XMLHTTP.6.0");
        WinHTTP.Open("GET", "http://localhost/Production/hs/PL/PL/Period?dn=20200122&dk=20201231";);
        WinHTTP.send();
        
        ТекстОтвета = СоздатьОбъект("Текст");
        ТекстОтвета.КодоваяСтраница(0);
        ТекстОтвета = WinHTTP.responseText;

Кодировки текста пытался менять и в 8.3 и 7.7, не помогает :( Где копать?
1 vde69
 
21.02.21
17:19
видимо вместо 0 надо поставить что-то правильное
2 Peltik
 
21.02.21
17:25
(1) КодоваяСтраница(<?>)
Синтаксис:
КодоваяСтраница(<Режим>)
Назначение:
Установить режим кодировки текста.
Возвращает:
текущее числовое значение режима кодировки (на момент до исполнения метода).
Параметры:
<Режим> : 0 - windows-кодировка, 1 - DOS-кодировка.


Например 2?
3 ДедМорроз
 
21.02.21
19:49
Как бы,стандартом для http является кодировка utf8.
Кодировка же ansi,это системная кодировка без преобразования AnsiToOem и обратно.
Соответственно,если код на сервере,а сервер нерусский,то в ней просто русских букв быть не может.
Кроме того,utf8 от ansi в первой части кодовой страницы 1-127 не отличается ничем.
4 Peltik
 
21.02.21
20:12
(3) не совсем понятно, какой вывод я отсюда должен сделать? :(
5 ДенисЧ
 
21.02.21
20:15
(4) Вывод простой - работай в нормальной кодировке.
Ты же KOI-7U не используешь?
6 Peltik
 
21.02.21
20:24
(5) а где в коде я использую ненормальную кодировку?

Единственное предположение из (3), что во всё виноват Apache, хотя если запрос выполнить из браузера, ту русские символы отображаются нормально
7 ДенисЧ
 
21.02.21
20:32
(6) "Результат,КодировкаТекста.ANSI"
Заметьте, не я это написал...
8 Peltik
 
21.02.21
20:40
(7) ни с OEM ни UTF8 ни с UTF16 не работает

Кодировки текста пытался менять и в 8.3 и 7.7, не помогает :(

Заметьте, это я написал, прям в первом посте
9 ДедМорроз
 
21.02.21
21:34
Ну и,самое главное,что Com-объект передает текст в кодировке unicode,и какую бы вы для текста не ставили,все в unicode останется.
Сервер должен в ответе указать правильную кодировку,которую объект httprequest уже вам преобразует в текст,а менять что-то в 1с после получения текста в неправильной кодировке - это как после драки кулаками не машут.
10 Вафель
 
21.02.21
21:35
в 8 утф, а 77 не умеет в утф
11 Вафель
 
21.02.21
21:37
хлтя можно попробовать в 8 в заголовке другую кодировку поставить
12 Eeeehhhh
 
22.02.21
08:53
Через ADODB.Stream читай
13 Peltik
 
22.02.21
09:58
(12) а можно чуть подробней?
14 Eeeehhhh
 
22.02.21
10:03
(13) в гугле забанили?
15 Peltik
 
22.02.21
10:14
(14) нет, не забанили

        Стрим = СоздатьОбъект("Adodb.Stream");
        Стрим.Type = 2;
        Стрим.Mode = 3;
        Стрим.charset = "utf-8";
        
        WinHTTP = СоздатьОбъект("MSXML2.XMLHTTP.6.0");
        WinHTTP.Open("GET", "http://localhost/Production/hs/PL/PL/Period?dn=20200122&dk=20201231";);
        WinHTTP.send();

        Стрим.Open();
        Стрим.WriteText(WinHTTP.responseText);
        Стрим.SaveToFile("d:\12345678.txt");
        Стрим.Close();

но в таком виде, всё равно в выходном файле фигня в виде ???? получается :(
16 Peltik
 
22.02.21
12:01
воткнул в начале текста <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> и всё заработало :/