Имя: Пароль:
1C
1C 7.7
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) а ведь сработало. Спасибо!
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс