Имя: Пароль:
1C
 
Вопрос по кодировке WinHTTP
0 AndreyV777
 
25.01.11
14:59
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"utf-8");    
WinHttp.SetRequestHeader("Accept-Language", "ru");

WinHttp.SetRequestHeader("Accept-Charset","utf8");
WinHttp.setRequestHeader("Content-Language", "ru");
WinHttp.setRequestHeader("Content-Charset", "utf8");
WinHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf8");

Res = WinHttp.Send(PostData);
Возврат WinHttp.ResponseText();

Страница в utf-8 кодировке, но WinHttp.ResponseText() всеравно возвращает кракозябры... Вопрос, что делать?
1 filh
 
25.01.11
15:07
а возвращает в какой?
2 AndreyV777
 
25.01.11
15:55
возвращает непонятно в какой ... просто знаки вопроса вместо русский символов ... пытался прочитать в браузере со сменой кодировки (ни одна не подходит)
3 AndreyV777
 
26.01.11
14:39
В интернете так и не нашел решения ... все ссылаются на перекодировку, но как это осуществить никто не пишет (((
5 smaharbA
 
26.01.11
16:12
Далее сам


Функция ПреобразованиеБинаровВТекст(Объект)
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   РекордСет=СоздатьОбъект("ADODB.Recordset");
   Объект.position=0;
   Скрипт.AddObject("Объект",Объект);
   Поля=РекордСет.Fields;
   Поля.Append("txt", 200, Объект.Size, 128);
   РекордСет.Open();
   РекордСет.AddNew();
   Скрипт.AddObject("Поле",Поля.Item("txt"));
   Скрипт.Eval("Поле.AppendChunk(Объект.Read)");
   Стр=РекордСет.Fields("txt").Value;
   РекордСет.Close();
   РекордСет=0;
   Возврат Стр;
КонецФункции

//*******************************************
Процедура Сформировать()
   Перем Кодировка,Прокси,Пользователь,Пароль;
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Это=Скрипт.Eval("this");
   
   Пользователь="ПользовательПроксиЕслиНадо";
   Пароль="ПарольПользователяПроксиЕслиНадо";
   Прокси="192.168.1.250:3128";
   Агент="Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
   ТаймАут=3000;
   Слово="пример запроса";
   НомерСтраницы=0;
   КоличествоРезультатов=50;
   ХТТПЗапрос = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
   Скрипт.AddObject("ХТТПЗапрос",ХТТПЗапрос);
   Если ПустоеЗначение(Прокси)=0 Тогда
       ХТТПЗапрос.SetProxy(2,Прокси);
   КонецЕсли;

   ХТТПЗапрос.SetTimeouts(ТаймАут,ТаймАут,ТаймАут,ТаймАут);

   УРЛ=Шаблон("http://yandex.ru/yandsearch?text=[Слово]&p=[НомерСтраницы]&numdoc=[КоличествоРезультатов]");
   ХТТПЗапрос.Open("GET", УРЛ, 0);

   Если ПустоеЗначение(Пользователь)=0 Тогда
       ХТТПЗапрос.SetCredentials(Пользователь,Пароль,1);
   КонецЕсли;

   Скрипт.Eval("ХТТПЗапрос.Option(0)='"+Агент+"'");
   
   ХТТПЗапрос.SetRequestHeader("Accept-Language", "ru");
   ХТТПЗапрос.SetRequestHeader("Accept-Charset", "Windows-1251");
   ХТТПЗапрос.setRequestHeader("Content-Language", "ru");
   ХТТПЗапрос.setRequestHeader("Content-Charset", "Windows-1251");
   ХТТПЗапрос.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=Windows-1251");
   ХТТПЗапрос.setRequestHeader("User-Agent",Агент);

   ХТТПЗапрос.Send();
   к=_GetPerformanceCounter();
   Пока ХТТПЗапрос.Status<>200 Цикл
       Если _GetPerformanceCounter()-к>=ТаймАут Тогда
           Сообщить("Страница "+УРЛ+" неотвечает. Пипец!","!!!");
           Возврат;
       КонецЕсли;
       Состояние("Ждем...");
   КонецЦикла;
   Попытка
       Кодировка=ХТТПЗапрос.GetResponseHeader("Content-Type");
       Кодировка=Нрег(СтрЗаменить(Кодировка," ",""));
       к=Найти(Кодировка,"charset=");
       Если к>0 Тогда
           Кодировка=Сред(Кодировка,к+8);
       КонецЕсли;
   Исключение
   КонецПопытки;
   Стрим = СоздатьОбъект("ADODB.Stream");
   Стрим.Mode = 3;
   Стрим.Type = 1;
   Стрим.Open();
   Скрипт.AddObject("Стрим",Стрим);
   Скрипт.Eval("Стрим.Write(ХТТПЗапрос.responseBody)");
   Стр=ПреобразованиеБинаровВТекст(Стрим);
   Стрим.Close();
   ХТМЛ = СоздатьОбъект("htmlfile");
   ХТМЛ.Open("text/html");
   ХТМЛ.write(Стр);
   Док=ХТМЛ.documentElement.document;
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn