|   |   | 
| 
 | v7: Перекодировка файла из utf8 в 1251 | ☑ | ||
|---|---|---|---|---|
| 0
    
        zenon46 28.05.24✎ 12:57 | 
        Доброго дня!
 Столкнулся с проблемой, с сайта прилетает файл в кодировке utf8, данные необходимо загрузить в базу, пытался перекодировать файл через Adodb.Stream, закрывается предприятие, думал файл слишком большой (10 мегабайт), урезал до 8 килобайт, та же история. Вот собственно код : АдоДБСтрим = CreateObject("Adodb.Stream"); АдоДБСтрим.Charset="utf-8"; АдоДБСтрим.Type = 2; АдоДБСтрим.Mode= 3; АдоДБСтрим.Open(); АдоДБСтрим.LoadFromFile(КаталогПользователя()+"products.json"); ТекстАдоДБСтрим = АдоДБСтрим.ReadText(); АдоДБСтрим.Close(); АдоДБСтрим.Charset = "windows-1251"; АдоДБСтрим.Open(); АдоДБСтрим.WriteText(ТекстАдоДБСтрим); АдоДБСтрим.SaveToFile(КаталогПользователя()+"products.json", 2); АдоДБСтрим.Close(); Что не так ? UPD Падает именно по размеру, с маленьким отрабатывает нормально. | |||
| 1
    
        Волшебник 28.05.24✎ 12:56 | 
        v7 - вот что не так     | |||
| 2
    
        trad 28.05.24✎ 12:58 | 
        Загрузка из файла JSON/#16
 это уже пробовал? | |||
| 3
    
        trad 28.05.24✎ 13:01 | 
        >>урезал до 8 килобайт, та же история.
 >>с маленьким отрабатывает нормально. показания расходятся | |||
| 4
    
        zenon46 28.05.24✎ 13:02 | 
        (2) с загрузкой все нормально, парсится нормально, вот только из за кодировки в кириллице "грузинский чай".     | |||
| 5
    
        zenon46 28.05.24✎ 13:03 | 
        (3) был не внимателен, не тот файл передавал на перекодировку. Думал что работаю с маленьким а передавал ссылку на большой. С маленьким файлом все ок.     | |||
| 6
    
        zenon46 28.05.24✎ 13:05 | 
        (3) запросить файл в кодировке 1251 не представляется возможным, те кто делал сайт сказали что нет технической возможности.     | |||
| 7
    
        trad 28.05.24✎ 13:10 | 
        (6) все же попробовать стоит. Те кто делал сайт вполне могут не догадываться что их сервер это умеет     | |||
| 8
    
        trad 28.05.24✎ 13:12 | 
        (5) тыщу раз уже обкашляли - не передать многобуков через ОЛЕ
 Либо весь код из (0) полностью загонять в MSScriptControl и там, внутри, конвертить. Либо OleExSup | |||
| 9
    
        trad 28.05.24✎ 13:13 | 
        (7) + попробуй
 HTTP.setRequestHeader("Accept-Charset", "windows-1251"); | |||
| 10
    
        zenon46 28.05.24✎ 13:25 | 
        (9) Пробовал так Карлик.УстановитьПараметр("HTTPHEADER","Content-Type: application/json;charset=windows-1251");
 Файл прилетает в 1251 но не читаем... | |||
| 11
    
        bmitkin 28.05.24✎ 13:48 | 
        Была такая проблема. Разделили стримы на читающий и пишущий.
 Вот такой код у меня справляется с большими файлами: 
Байт=255;
СтримВход = СоздатьОбъект("Adodb.Stream");
СтримВход.Type = 2;
СтримВход.charset = ИзКодировки;
СтримВход.Open();
СтримВход.LoadFromFile(ВременныйФайл);
СтримВыход = СоздатьОбъект("Adodb.Stream");
СтримВыход.Type = 2;
СтримВыход.charset = ВКодировку;
СтримВыход.Open();
Пока СтримВход.EOS=0 Цикл
    СтримВыход.WriteText(СтримВход.ReadText(Байт),?(Байт=-2,1,0));
КонецЦикла;
СтримВход.Close();
СтримВыход.SaveToFile(ИмяФайла,2);
 | |||
| 12
    
        trad 28.05.24✎ 13:56 | 
        (10) Content-Type - это про то что клиент/сервер передается сейчас в теле запроса/ответа.
 Accept-Charset - это про то что клиент ожидает получить в теле ответа | |||
| 13
    
        Djelf 28.05.24✎ 14:05 | 
        (10) Скинь полученный файл.
 Adodb с карликом не требуется использовать. Это как скрещивать ежа с ужом, теоретически возможно, а практически нет. | |||
| 14
    
        MWWRuza гуру 28.05.24✎ 15:15 | 
        Если уж карлика используете, то что мешает и конвертить с помощью него, из описания изменений:
 // ------------------------------------------------------------------------------------ 2022.11.25 версия 1.0.0.8 СтрокаUTF8 = Карлик.ToUTF8(СтрокаASCII) СтрокаASCII = Карлик.FromUTF8(СтрокаUTF8) Аааа.... Не обратил внимание, там файл а не строка... Тогда сложнее. | |||
| 15
    
        Djelf 28.05.24✎ 15:17 | 
        +(14) Последний FormEx делает то же самое, и тем же самым кодом внутри.
 Но оверхед копеечный, путь везде будет... | |||
| 16
    
        zenon46 28.05.24✎ 15:18 | 
        (11) а ведь сработало. Спасибо!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |