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