|
Base64Строка(). Боль. Страдание. Унижение. | ☑ | ||
---|---|---|---|---|
0
H A D G E H O G s
21.11.13
✎
21:56
|
Вечера доброго.
Теперь уж поздно, но может кому и пригодиться. Base64Строка() при конвертации большого объема данных вставляет, сцуко, переносстроки-возвраткаретки (#13#10) дабы наверное, текстовый файлег красиво выглядел. Это в сырые то данные. как пример: макет=(ПолучитьОбщийМакет("НаСтенеКартина")); строкаданных=Base64Строка(макет); запись=новый ЗаписьТекста("c:\test1.txt",КодировкаТекста.ANSI,""); запись.Записать(строкаданных); запись.Закрыть(); |
|||
1
Вуглускр1991
21.11.13
✎
21:58
|
А в обратную сторону уже после этого не преобразовывает?
Или артефакты на картинке? |
|||
2
H A D G E H O G s
21.11.13
✎
22:00
|
Обратно я сам преобразовываю в Дельфях. Там вообще хитрость была, но долго объяснять.
|
|||
3
Вуглускр1991
21.11.13
✎
22:03
|
Боль страдание и унижение - это когда ты лепишь xml через DOM, а потом в записи xml встречаются символы < и > и &. Причем не все подряд, а примерно процентов 5 из общего числа этих символов в исходных данных. Пришлось потом открывать этот файл как текстовый и находить эти неправильные символы. Тег открыли, Тег закрыли... Собственный парсер. Просто, чтобы оно заработало.
|
|||
4
pumbaEO
21.11.13
✎
22:04
|
(0) Почему это неправильно?
|
|||
5
Адимр
21.11.13
✎
22:05
|
(0) Вряд ли это base64 скорее всего "записьтекста". Сохраняй через "двоичныеданные"
|
|||
6
oleg_km
21.11.13
✎
22:12
|
(5) ЗаписьТекста не может сама вставлять, она может только заменить одни переносы на другие
(0) Это по-моему в каком-то стандарте описано разбиение толи на строки 78 толи 80 символов, как рекомендация |
|||
7
H A D G E H O G s
21.11.13
✎
22:18
|
(6) по 65 символов дробит
|
|||
8
Адимр
21.11.13
✎
22:35
|
У меня по 64.
Наверное это и правильно wiki:Base64 |
|||
9
mistеr
21.11.13
✎
22:35
|
(2) >Обратно я сам преобразовываю в Дельфях.
Плохо преобразовываешь. |
|||
10
olegves
21.11.13
✎
22:47
|
(0) не замечал такого - Двоичные данные и гоняю туда-сюда по несколько раз через обмены в разные узлы и графику, и шаблоны биометрии
|
|||
11
Dmitry1c
21.11.13
✎
22:49
|
(0) название темы - шедевр
|
|||
12
Птица
21.11.13
✎
22:55
|
(11) да
|
|||
13
H A D G E H O G s
21.11.13
✎
23:05
|
(9) Обоснуй
|
|||
14
H A D G E H O G s
21.11.13
✎
23:07
|
(10) Ключевое слово: "через обмены в разные узлы"
|
|||
15
H A D G E H O G s
21.11.13
✎
23:09
|
(8) Ты неправильно понял суть проблемы.
Ладно, кому надо, тот поймет, кто не сталкивался - тот продолжит писать отчеты в СКД. |
|||
16
mistеr
22.11.13
✎
00:07
|
(13) Base64 придумали, чтобы передавать бинарные данные по почте. Раньше почтовые сервера имели ограничения на длину строк в тексте письма. Некоторые могли даже порезать длинные строки на короткие. И данные должны были выживать после такой операции. В общем, нормальный декодер должен игнорировать #13#10.
|
|||
17
Torquader
22.11.13
✎
00:43
|
Непонятно, в чём проблема - встретив символы 13,10 и 32 можно их просто пропустить.
|
|||
18
H A D G E H O G s
22.11.13
✎
11:48
|
(16) (17) Ирония судьбы в том, что я раньше использовал "нормальный декодер", которому было пофиг на неправильные символы, однако он не считал конечный размер буфера (ну так правильно - хз, сколько его будет, если данные грязные) и перевыделял память под каждый новый декодированный символ. Нахер.
Теперь есть годные декодер, выделяющий память сразу. Мне остается только почистить исходные данные от переносов. Поэтому нельзя "встретить символы", их надо сначало убрать. И почему 32 там затесался? |
|||
19
acsent
22.11.13
✎
11:53
|
(18) может все-таки декодер допилить?
|
|||
20
H A D G E H O G s
22.11.13
✎
11:54
|
(19) Декодер нельзя допилить.
|
|||
21
acsent
22.11.13
✎
11:54
|
(20) это почему же?
|
|||
22
H A D G E H O G s
22.11.13
✎
11:55
|
Хотя нет, можно.
Выделяем буфер с учетом грязных данных, в декодере отбрасываем грязные данные и считаем реальный размер буфера. Режем буфер. |
|||
23
acsent
22.11.13
✎
11:55
|
(22) Бинго !!
|
|||
24
H A D G E H O G s
22.11.13
✎
11:56
|
:-)
|
|||
25
Serginio1
22.11.13
✎
12:27
|
Запиши через ЗаписьXML
http://speshuric.livejournal.com/163665.html ТекстПостроитель = Новый ЗаписьXML; ТекстПостроитель.ЗаписатьБезОбработки(БазоваяСтрокаПС); |
|||
26
H A D G E H O G s
22.11.13
✎
12:33
|
(25) Не открывается ссылка.
|
|||
27
Serginio1
22.11.13
✎
12:39
|
(26) У меня открывается. Там суть в том, что бы использовать ЗаписьXML как StringBuilder.
//Способ 3. Создание через ЗаписьXML Сообщить("Способ 3. Создание через ЗаписьXML - Начало " + Строка(ТекущаяДата())); ФиктивныйРезультат = 0; Для СчИтераций = 1 по КоличествоИтераций Цикл Состояние("Способ 3. Создание через ЗаписьXML - " + Строка(СчИтераций)); ТекстПостроитель = Новый ЗаписьXML; ТекстПостроитель.УстановитьСтроку(); Для СчДобавлений = 1 по (ОбщаяДлинаСтроки/ДлинаДобавляемогоКуска) Цикл ТекстПостроитель.ЗаписатьБезОбработки(БазоваяСтрокаПС); КонецЦикла; СтрокаРезультат = ТекстПостроитель.Закрыть(); ФиктивныйРезультат = ФиктивныйРезультат + СтрДлина(СтрокаРезультат); ОбработкаПрерыванияПользователя(); КонецЦикла; Сообщить("Фиктивный результат = " + Строка(ФиктивныйРезультат)); Сообщить("Способ 3. Создание через ЗаписьXML - Окончание " + Строка(ТекущаяДата())); Но видно при записи будет пихать и заголовок. Но можно и читать без этого заголовка. |
|||
28
Кирпич
22.11.13
✎
13:00
|
в Synapse есть великолепный велосипед synacode.pas
Кодирует и раскодирует всё и вся. Без боли, страданий и унижений. |
|||
29
Кирпич
22.11.13
✎
13:01
|
ух ты. меня разбанило.
|
|||
30
delavar
22.11.13
✎
13:08
|
(3) Вот это точно! Как раз напоролся
|
|||
31
Serginio1
22.11.13
✎
13:42
|
(0) Вот так записывате нормально
ТекстПостроитель = Новый ЗаписьXML; ТекстПостроитель.ОткрытьФайл("C:\ТестXML","US-ASCII"); ТекстПостроитель.ЗаписатьБезОбработки("12345"); ТекстПостроитель.Закрыть(); |
|||
32
Вуглускр1991
23.11.13
✎
10:59
|
(30) И как решил?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |