| 
    
        
     
     | 
    
  | 
v7: Сохранение результата запроса в utf-8 | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        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 
 | 
||||
| 
    2
    
        g00d    
     03.05.18 
            ✎
    17:34 
 | 
||||
| 
    3
    
        Масянька    
     03.05.18 
            ✎
    17:35 
 | 
         
        + (1) С такой полоской - пора бы уже научиться гуглить...     
         | 
|||
| 
    4
    
        Slypower    
     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  | 
|||
| 
    5
    
        Snork    
     03.05.18 
            ✎
    18:46 
 | 
         
        Тут в другом проблема
 
        WinHttp.ResponseText() возвращает уже в кодировке utf-8 А 7.7 ее не поддерживает, это уже абра-кадабра Надо это как то записать в читаемом виде в файл. Что-то похожее описано в: https://www.forum.mista.ru/topic.php?id=529295  | 
|||
| 
    6
    
        Snork    
     03.05.18 
            ✎
    18:47 
 | 
         
        (1) - это не то. проблема в другом     
         | 
|||
| 
    7
    
        Snork    
     03.05.18 
            ✎
    18:48 
 | 
         
        (2) - не то, текст еще не записан, но уже пришел не в той кодировке. его так не преобразовать.     
         | 
|||
| 
    8
    
        Злопчинский    
     03.05.18 
            ✎
    19:17 
 | 
         
        (5) При чем здесь 77? пришла строка в утф, вдобавок ты получаешь ответ не77методами, а внешними компонентами. ну так используй любые внешние нужные возможности для запихивание строки в не77текстовый файл.     
         | 
|||
| 
    9
    
        ugorchina    
     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);  | 
|||
| 
    10
    
        ugorchina    
     03.05.18 
            ✎
    19:34 
 | 
         
        Если сайт отдает в utf8 то зачем кодировать по-новой?     
         | 
|||
| 
    11
    
        ugorchina    
     03.05.18 
            ✎
    19:35 
 | 
         
        Дайте полный код без логина и пароля я посмотрю     
         | 
|||
| 
    12
    
        ugorchina    
     03.05.18 
            ✎
    19:40 
 | 
         
        Я бы дал ссыль на свои статьи да боюсь забанят меня ( на самом деле если сайт возвращает в utf8 то все должно быть ок но видимо у Вас с калибровкой на сайте что то не то( посмотрите в базе в таблицах какая калибровка установлена ? А так же в конфигурации файле сайта там то же должна быть кодировка     
         | 
|||
| 
    13
    
        ugorchina    
     03.05.18 
            ✎
    19:41 
 | 
         
        У меня сайт возвращает в utf 8 и в 7 ее все читаемо     
         | 
|||
| 
    14
    
        Сияющий в темноте    
     03.05.18 
            ✎
    19:42 
 | 
         
        winhttprequest должен читать кодировку и переводить ее в двухбайтовую,если вы не берете из него байтовый поток который есть массив байт,и 1с ничего не умеет делать с массивом байт,его нужно отдавать тому же AdoDb.Stream или сценарию на VbScript,где собирать из него строку,нормальную двухбайтовую,которую передавать в 1с,где из нее будет сделана однобайтовая с потерей символов,и вот с ней вы уже будете работать
 
        все просто,если внимательно читать описания обьектов и другую справочную информацию  | 
|||
| 
    15
    
        ugorchina    
     03.05.18 
            ✎
    19:47 
 | 
         
        (14) )) Вы на полочку опираетесь?))))     
         | 
|||
| 
    16
    
        ugorchina    
     03.05.18 
            ✎
    19:47 
 | 
         
        ))) полоску     
         | 
|||
| 
    17
    
        ugorchina    
     03.05.18 
            ✎
    19:56 
 | 
         
        WinHttp.ResponseText() посмотрите что здесь результат в студию     
         | 
|||
| 
    18
    
        ugorchina    
     03.05.18 
            ✎
    19:57 
 | 
         
        стучитесь  в аську 722576410     
         | 
|||
| 
    19
    
        big    
     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(ИмяФайла);  | 
|||
| 
    20
    
        Snork    
     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???  | 
|||
| 
    21
    
        Snork    
     04.05.18 
            ✎
    10:14 
 | 
         
        (19) 
 
        ИсправлениеКодировки() - не помогло, т.к. уже приходит абра-кадабра MSXML2.DOMDocument - тоже не помогло  | 
|||
| 
    22
    
        Snork    
     04.05.18 
            ✎
    11:13 
 | 
         
        ап     
         | 
|||
| 
    23
    
        Slypower    
     04.05.18 
            ✎
    11:36 
 | 
         
        В РБ есть ЭСЧФ. Так это получение xml файлов из интернета и обработка их. Выставляют в разных кодировках, абсолютно. 
 
        Для обработки я использую схему: сохранить файл, перекодировать как в (4), а затем уже с помощью Scripting.FileSystemObject читаю. Никаких проблем нет  | 
|||
| 
    24
    
        Snork    
     04.05.18 
            ✎
    11:46 
 | 
         
        РЕШЕНО. Надо было читать НЕ из 1С     
         | 
|||
| 
    25
    
        Snork    
     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();  | 
|||
| 
    26
    
        ugorchina    
     04.05.18 
            ✎
    14:29 
 | 
         
        а я вот не смог помочь ( печаль (     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |