Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Сохранение результата запроса в utf-8

v7: Сохранение результата запроса в utf-8
Я
   Snork
 
03.05.18 - 17:31
Получаю данные с сайта через WinHttp.WinHttpRequest.5.1
Сайт умеет отдавать только в utf-8.

Как можно это дело сохранить в файл в utf-8?

Пробовал:
Stream = CreateObject("Adodb.Stream");
Stream.Charset="utf-8";
Stream.Type = 2;
Stream.Mode = 3;
Stream.Open();
Stream.WriteText("<?xml version=""1.0"" encoding=""utf-8""?>");
Stream.WriteText(WinHttp.ResponseText());
Stream.SaveToFile("d:\1.xml", 2);

не помогло. А объект "Текст" в 7.7 не умеет с utf-8.

Это вообще возможно?
 
 
   Масянька
 
1 - 03.05.18 - 17:34
   g00d
 
2 - 03.05.18 - 17:34
   Масянька
 
3 - 03.05.18 - 17:35
+ (1) С такой полоской - пора бы уже научиться гуглить...
   Slypower
 
4 - 03.05.18 - 18:37
Функция ПреобразоватьСтрокуВУТФ8(Стр)
    Длина=СтрДлина(Стр);
    Итог="";
    Для Н=1 По Длина Цикл
        Знак=Сред(Стр,Н,1);
        Код=КодСимв(Знак);
        Если Код<128 Тогда
            Итог=Итог+Знак;
        Иначе
            Если (Код>=КодСимв("А"))И(Код<=КодСимв("п")) Тогда
                Итог=Итог+Симв(208)+Симв(144+Код-КодСимв("А"));
            ИначеЕсли (Код>=КодСимв("р"))И(Код<=КодСимв("я")) Тогда
                Итог=Итог+Симв(209)+Симв(128+Код-КодСимв("р"));
            ИначеЕсли (Знак="ё") Тогда
                Итог=Итог+Симв(209)+Симв(145);
            ИначеЕсли (Знак="Ё") Тогда
                Итог=Итог+Симв(208)+Симв(129);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Возврат Итог;
КонецФункции   

Процедура ПерекодировкаФайлаWin_UTF8(ИмяФайлаWin,ИмяФайлаUTF8)
    ТекстWin=СоздатьОбъект("Текст"); 
    ТекстUTF8=СоздатьОбъект("Текст"); 
    ТекстWin.Открыть(ИмяФайлаWin);
    Для к=1  По ТекстWin.КоличествоСтрок() Цикл  
        СтрWin=ТекстWin.ПолучитьСтроку(к);    
        СтрUTF8=ПреобразоватьСтрокуВУТФ8(СтрWin);
        ТекстUTF8.ДобавитьСтроку(СтрUTF8);
    КонецЦикла;                           
    ТекстUTF8.Записать(ИмяФайлаUTF8);
КонецПроцедуры    // ПерекодировкаФайлаWin_UTF8
   Snork
 
5 - 03.05.18 - 18:46
Тут в другом проблема
WinHttp.ResponseText()
возвращает уже в кодировке utf-8

А 7.7 ее не поддерживает, это уже абра-кадабра

Надо это как то записать в читаемом виде в файл.

Что-то похожее описано в:
https://www.forum.mista.ru/topic.php?id=529295
   Snork
 
6 - 03.05.18 - 18:47
(1) - это не то. проблема в другом
   Snork
 
7 - 03.05.18 - 18:48
(2) - не то, текст еще не записан, но уже пришел не в той кодировке. его так не преобразовать.
   Злопчинский
 
8 - 03.05.18 - 19:17
(5) При чем здесь 77? пришла строка в утф, вдобавок ты получаешь ответ не77методами, а внешними компонентами. ну так используй любые внешние нужные возможности для запихивание строки в не77текстовый файл.
   ugorchina
 
9 - 03.05.18 - 19:33
Как по моему не правильно написано надо вроде так но я могу ошибаться
Stream = CreateObject("Adodb.Stream");
Stream.Charset="utf8";
Stream.Type = 2;
Stream.Mode = 3;
Stream.Open();
Stream.WriteText("<?xml version=""1.0"" encoding=""utf8""?>");
Stream.WriteText(WinHttp.ResponseText());
Stream.SaveToFile("d:\1.xml", 2);
   ugorchina
 
10 - 03.05.18 - 19:34
Если сайт отдает в utf8 то зачем кодировать по-новой?
 
 Рекламное место пустует
   ugorchina
 
11 - 03.05.18 - 19:35
Дайте полный код без логина и пароля я посмотрю
   ugorchina
 
12 - 03.05.18 - 19:40
Я бы дал ссыль на свои статьи да боюсь забанят меня ( на самом деле если сайт возвращает в utf8 то все должно быть ок но видимо у Вас с калибровкой на сайте что то не то( посмотрите в базе в таблицах какая калибровка установлена ? А так же в конфигурации файле сайта там то же должна быть кодировка
   ugorchina
 
13 - 03.05.18 - 19:41
У меня сайт возвращает в utf 8 и в 7 ее все читаемо
   Сияющий в темноте
 
14 - 03.05.18 - 19:42
winhttprequest должен читать кодировку и переводить ее в двухбайтовую,если вы не берете из него байтовый поток который есть массив байт,и 1с ничего не умеет делать с массивом байт,его нужно отдавать тому же AdoDb.Stream или сценарию на VbScript,где собирать из него строку,нормальную двухбайтовую,которую передавать в 1с,где из нее будет сделана однобайтовая с потерей символов,и вот с ней вы уже будете работать
все просто,если внимательно читать описания обьектов и другую справочную информацию
   ugorchina
 
15 - 03.05.18 - 19:47
(14) )) Вы на полочку опираетесь?))))
   ugorchina
 
16 - 03.05.18 - 19:47
))) полоску
   ugorchina
 
17 - 03.05.18 - 19:56
WinHttp.ResponseText() посмотрите что здесь результат в студию
   ugorchina
 
18 - 03.05.18 - 19:57
стучитесь  в аську 722576410
   big
 
19 - 04.05.18 - 05:04
Сохранить utf8 средствами 1С 7.7

Вариант 1.
Функция ИсправлениеКодировки(Стр)
    
    Длина=СтрДлина(Стр);
    Итог="";
    Для Н=1 По Длина Цикл
        Знак    = Сред(Стр,Н,1);
        Код        = КодСимв(Знак);
        Если Код<128 Тогда
            Итог    = Итог+Знак;
        Иначе
            Если (Код>=КодСимв("А"))И(Код<=КодСимв("п")) Тогда
                Итог    = Итог+Симв(208)+Симв(144+Код-КодСимв("А"));
            ИначеЕсли (Код>=КодСимв("р"))И(Код<=КодСимв("я")) Тогда
                Итог    = Итог+Симв(209)+Симв(128+Код-КодСимв("р"));
            ИначеЕсли (Знак="ё") Тогда
                Итог    = Итог+Симв(209)+Симв(145);
            ИначеЕсли (Знак="Ё") Тогда
                Итог    = Итог+Симв(208)+Симв(129);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    Возврат Итог;
КонецФункции

Вариант 2.
    WinHttp.SetCredentials(СокрЛП(Login),СокрЛП(Password),0);
WinHttp.setRequestHeader("Content-Type","text/xml;charset=UTF-8");
WinHttp.SetRequestHeader("Content-Length", Строка(СтрДлина(ТекстДляОтправки)));
WinHttp.Send(ТекстДляОтправки);

ОтветСервиса=WinHttp.ResponseText();

DOMDocument    = СоздатьОбъект("MSXML2.DOMDocument");
DOMDocument.loadXML(ОтветСервиса);
DOMDocument.save(ИмяФайла);
   Snork
 
20 - 04.05.18 - 10:10
(17) Не весь, но до места, где уже качественно видно другую кодировку:
<response><metadata>
  <counteragents_updated_at>None</counteragents_updated_at>
  <current_page>1</current_page>
  <generated_at>2018-05-04 10:09:30.099227</generated_at>
  <next_page>None</next_page>
  <prev_page>None</prev_page>
  <total_pages>1</tota_pages>
</metadata>
<orders>
  <air></air>
  <arrival>
    <address>249030, ???°?»N??¶N????°N? ???±?», ???±??????N??? ??, ???°N???N??° ??N?-??N?, ?????? a?? 50</address>
    <address_code>4000000200000710000000000</address_code>
    <city>???±??????N???
   Snork
 
21 - 04.05.18 - 10:14
(19)
ИсправлениеКодировки() - не помогло, т.к. уже приходит абра-кадабра

MSXML2.DOMDocument - тоже не помогло
   Snork
 
22 - 04.05.18 - 11:13
ап
   Slypower
 
23 - 04.05.18 - 11:36
В РБ есть ЭСЧФ. Так это получение xml файлов из интернета и обработка их. Выставляют в разных кодировках, абсолютно.
Для обработки я использую схему: сохранить файл, перекодировать как в (4), а затем уже с помощью Scripting.FileSystemObject читаю. Никаких проблем нет
   Snork
 
24 - 04.05.18 - 11:46
РЕШЕНО. Надо было читать НЕ из 1С
   Snork
 
25 - 04.05.18 - 11:48
Stream = СоздатьОбъект("ADODB.Stream"); 
Stream.Mode = 3; 
Stream.Type = 1; 
Stream.Open(); 
        
Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl"); 
Скрипт.Language = "javascript"; 
        
Скрипт.AddObject("WinHttp", WinHttp); 
Скрипт.AddObject("Стрим",   Stream); 
        Скрипт.Eval("Stream.Write(WinHttp.ResponseBody)"); 
        
Stream.SaveToFile(КаталогВременныхФайлов() + "5.xml", 2);
Stream.Close();
   ugorchina
 
26 - 04.05.18 - 14:29
а я вот не смог помочь ( печаль (


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