Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Кодировка в HTTP запросах

Кодировка в HTTP запросах
Я
   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, не помогает :( Где копать?
 
 Партнерская программа EFSOL Oblako
   vde69
 
1 - 21.02.21 - 17:19
видимо вместо 0 надо поставить что-то правильное
   Peltik
 
2 - 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 не отличается ничем.
   Peltik
 
4 - 21.02.21 - 20:12
(3) не совсем понятно, какой вывод я отсюда должен сделать? :(
   ДенисЧ
 
5 - 21.02.21 - 20:15
(4) Вывод простой - работай в нормальной кодировке.
Ты же KOI-7U не используешь?
   Peltik
 
6 - 21.02.21 - 20:24
(5) а где в коде я использую ненормальную кодировку?

Единственное предположение из (3), что во всё виноват Apache, хотя если запрос выполнить из браузера, ту русские символы отображаются нормально
   ДенисЧ
 
7 - 21.02.21 - 20:32
(6) "Результат,КодировкаТекста.ANSI"
Заметьте, не я это написал...
   Peltik
 
8 - 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 в заголовке другую кодировку поставить
   Eeeehhhh
 
12 - 22.02.21 - 08:53
Через ADODB.Stream читай
   Peltik
 
13 - 22.02.21 - 09:58
(12) а можно чуть подробней?
   Eeeehhhh
 
14 - 22.02.21 - 10:03
(13) в гугле забанили?
   Peltik
 
15 - 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();

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

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.