Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 04.08.2010, 18:11   #1
Shad0w64bit
Пользователь
 
Регистрация: 09.05.2009
Сообщений: 12
Вопрос base64 в delphi 2009

Здравствуйте! У меня есть закодированый в base64 jpg файл base64.txt
если декодировать код на этом сайте то в итоге получается бинарный файл с картинкой

Собственно вопросы:
1)В каких кодировках надо загружать и сохранять файл
2)Каким образом его декодировать

Декодировать пробовал этим
Код:
_decoder := TIdDecoderMIME.Create(nil);
text := _decoder.DecodeString(text);
freeandnil(_decoder);
но в итоге вместо
Цитата:
JFIF;CREATOR: gd-jpeg v1.0
получаю
Цитата:
JFIF;CREATOR: gd-jpeg?абв... и дальше код не совпадаетт
возможно это из за кодировок. Прошу вашей помощи !HELP!

буду рад примеру
Shad0w64bit вне форума
Старый 04.08.2010, 19:05   #2
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

А почему бы не воспользоваться функциями:
Цитата:
DecodeStream(Input: TStream; Output: TStream);
EncodeStream(Input: TStream; Output: TStream);
из модуля EncdDecd ?
Так же шифрует/расшифровывает Stream'ы с помощью base64.
W0LF вне форума
Старый 04.08.2010, 20:13   #3
Shad0w64bit
Пользователь
 
Регистрация: 09.05.2009
Сообщений: 12
По умолчанию

Спасибо огромное!!! Работает как надо))))
Shad0w64bit вне форума
Старый 05.08.2010, 02:06   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Не существует такой вещи как просто текст. Если у вас есть строка, в памяти, в файле, или в сообщении электронной почты, вы должны знать, в какой она кодировке, иначе вы не сможете ее правильно интерпретировать или показать пользователю. Почти все глупые проблемы типа "мой вебсайт похож на тарабарщину" или "она не может читать мои электронные письма, если я использую символы с ударениями" сводятся к одному наивному программисту, который не понимет того простого факта, что если вы не говорите мне, находится ли специфическая строка в кодировке UTF-8 или ASCII или ISO 8859-1 (Латинский-1) или Windows 1252 (Западноевропейский), вы просто не сможете показать ее правильно или даже выяснить, где она заканчивается. Есть более ста кодировок символов выше кодовой точки 127, и нет никакой информации для того, чтобы выяснить, какая кодировка нужна.

В 2010-м году вы не можете просто сделать вид, что ничего такого не существует, и зарыть свою голову в песок. Возвращайтесь в свои 80-е, но больше не пишите ни одной строчки кода, пока вы не разберётесь, как работают кодировки, спасибо.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума
Старый 05.08.2010, 07:06   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

GunSmoker, написано все правильно.
Но, Вы уж извините меня, КАКОЕ отношение это имеет к проблеме TC (тем более решённой) ?! Вы знаете, что такое BASE64 и для чего её придумали? Именно для того, чтобы избежать проблем с сотнями кодировок и потерь данных при передачи по сети. В строке, закодированной base64 нет и не может быть символов, выходящих за пределы английской кодовой таблицы (это тех, которые Вы называете "символов выше кодовой точки 127" )

Другое дело, что корень проблемы TC (_возможно_) заключается именно в том, что TIdDecoderMIME не умеет корректно работать с Unicode строчками (которые и используются по умолчанию в новых версия Delphi). Но согласитесь, это же не проблема автора топика!
Serge_Bliznykov вне форума
Старый 05.08.2010, 14:59   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
КАКОЕ отношение это имеет к проблеме TC
Есть сильное подозрение, что автор вопроса не приложил ни малейшего усилия к познанию, что же делает предложенный код, и чем он отличается от его варианта. Надо ли говорить, что подобный подход ведёт к говно-коду?

Это не более чем позыв к улучшению своего образования. По крайней мере, это убережёт его в будущем от таких вещей как представление произвольного файла в виде строки.

Сравните:
Цитата:
У меня есть закодированый в base64 jpg файл
с
Цитата:
DecodeString
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
TIdDecoderMIME не умеет корректно работать с Unicode строчками
Есть мнение, что он-то как раз работает нормально. Просто идея представления бинарного файла в виде строки - дефектна по-определению.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось Stilet; 05.08.2010 в 17:19.
GunSmoker вне форума
Старый 05.08.2010, 17:06   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Просто идея представления бинарного файла в виде строки - дефектна по-определению.
Вы шутите?
Ну так откройте любое почтовое вложение (на уровне исходного текста = mbox) и посмотрите.
По другому файлы по почте не передаются!
Или, исходя из Вашего посыла, "идея передавать бинарные файлы по почте - дефектна по определению" ?!!!
Serge_Bliznykov вне форума
Старый 05.08.2010, 17:17   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Вы понимаете разницу между текстовым представлением кодированного файла и самим бинарным файлом в строке? Файл <> его base64-форма.

Что, по-вашему, (хотя бы теоретически) должно быть в Text после декодирования? Как вы собираетесь уложить JPG файл в unicode-строку?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума
Старый 05.08.2010, 17:20   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как вы собираетесь уложить JPG файл в unicode-строку?
Элементарно. строка это массив байт. Файл это массив байт. Массив поместить в массив труда не составит.
Кстати бинарные данные оч. удобно хранить в строка или в Stream.
I'm learning to live...
Stilet вне форума
Старый 05.08.2010, 17:27   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Угу, пять баллов. И что же делать, если размер файла не чётен?

И после этого мы удивляемся, почему получаются дракозябры.

Строка - это не массив байт. Это массив символов. Массив байт - это разве что RawByteString, которым в коде и не пахнет.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
base64 beemoto Общие вопросы Delphi 0 24.04.2010 21:58
Нужно написать/исправить функцию на Delphi, Base64 encode gvm Фриланс 2 13.04.2010 18:19
base64 Dimarik Win Api 0 10.04.2010 18:59
кодировать в base64 furstenberg Общие вопросы Delphi 13 29.08.2008 17:02
base64 BlackOmen Общие вопросы Delphi 2 02.05.2008 16:30