Имя: Пароль:
1C
1С v8
кодировка WinHttp
0 andr_scr
 
21.06.12
16:51
Доброе время суток!

Получаю хмл файл через COMОбъект("WinHttp.WinHttpRequest.5.1"), использую метод POST. Файл получаю все отлично, но текст на русском вообще непонятной кодировки. Читаю на форумах, проблема известная, а вот решение не нашел. Может кто знает секрет в чем?!
1 oleg_km
 
21.06.12
17:43
Есть такая проблема. Берите ответ не их responseText, а из responsBody вроде. Там его можно сохранить в файл, а файл открыть в нужной кодировке
2 andr_scr
 
21.06.12
19:06
(1) спасибо получилось...
3 Adept
 
05.07.12
09:42
Народ, подскажите как, у меня responsBody COM массив
4 Adept
 
05.07.12
10:17
Вот, как то так ...

StreamTypeEnum = Новый Структура("adTypeBinary, adTypeText", 1, 2);
   ConnectModeEnum = Новый Структура(
   "adModeRead, adModeReadWrite, adModeRecursive, adModeShareDenyNone,
   |adModeShareDenyRead, adModeShareDenyWrite, adModeShareExclusive,
   |adModeUnknown, adModeWrite", 1, 3, 4194304, 16, 4, 8, 12, 0, 2);
   SaveOptionsEnum = Новый Структура("adSaveCreateNotExist, adSaveCreateOverWrite", 1, 2);
   
   
   StreamOut = Новый COMОбъект("ADODB.Stream");
   StreamOut.Type = StreamTypeEnum.adTypeBinary;
   StreamOut.Mode = ConnectModeEnum.adModeReadWrite; //Нужны и чтение и запись.
   
   StreamOut.Open(); //Открыли на чтение и запись
   StreamOut.Write(WinHttp.ResponseBody);
   StreamOut.SaveToFile("d:\worck\tmp\rezult.zip", SaveOptionsEnum.adSaveCreateOverWrite); //"2" - перезапись файла
   StreamOut.Close();
5 Torquader
 
05.07.12
18:45
Вообще-то, лучше посмотреть в сторону MSXML2.ServerXMLHTTP и попытаться в заголовке указать требуемую кодировку, чтобы ответ был получен в ней.
А по умолчанию ответ получается в однобайтовой UTF-8, где символы Unicode кодируются 1-3 байтами.
6 smaharbA
 
05.07.12
18:49
Функция ПолучитьОбертку()
   ХТМЛ = Новый COMОбъект("htmlfile");
   ХТМЛ.Open("text/html");
   //<-- Подготовим нужные методы
   ХТМЛ.Write("<script>
   |var ХТМЛ;
   |Опция=function(x,y,z){var ret=x.Option(y);if(z) x.Option(y)=z; return ret};
   |Записать=function(x,y){x.Write(y.responseBody())};
   |</script>");
   Док=ХТМЛ.documentElement.document;
   // Внедрение объекта Скрипта в самого себя, для сохранности контекста
   Док.script.ХТМЛ=ХТМЛ;
   // Все подготовке -->
   Возврат Док.script;
КонецФункции    // ПолучитьОбертку(Это)

//*******************************************
Процедура Сформировать()
   Это=ПолучитьОбертку();
   ХТТП = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
   
   ХТТП.Open("POST",УРЛ,0);
   Это.Опция(ХТТП,2,1251);
   Это.Опция(ХТТП,4,13056);
   ХТТП.SetRequestHeader("Accept-Language", "ru");
   ХТТП.SetRequestHeader("Accept-Charset","Windows-1251");
....
   Сообщить(ХТТП.getAllResponseHeaders());
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.