![]() |
|
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
|
а я вот не смог помочь ( печаль (
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |