Функции кодирования строки в base64 и декодирования строки из base64 с учетом кодировки символов

26 7

Те, кому часто приходится работать в системе с html-контентом, например, при использовании веб-контролов или при разработке обложек папок, наверно уже заметили, что их очень удобно хранить в системе закодированными в base64. Стандартные функции кодирования/декодирования в/из base64, которые входят в список системных функций кодируют и декодируют строки только в кодировке Windows-1251. Не всегда удобно использовать именно эту кодировку символов, особенно если вы используете какие-то сторонние компоненты, которые обычно имеют кодировку UTF-8. Для возможности кодирования и декодирования строк в других кодировках были разработаны две функции, справка по которым представлена ниже:

Разработку для DIRECTUM 5.2 можно взять тут:

Прикреплен файл: Base64.zip

Александр Чугунов

По ссылке файл не скачать, выдает 404. Выложите, пожалуйста, на гитхаб или еще куда.

Александр Чугунов

  Написал свою функцию, получилось что-то типа

  XML = CreateObject("Msxml2.DOMDocument")
  XmlNode = XML.createElement("tmp")
  XmlNode.datatype = "bin.base64"
 
  ado = CreateObject("ADODB.Stream") 
  ado.Charset = Encoding // UTF-8 и другие
  ado.Type = 2
  ado.Open
  ado.WriteText(String) // String - строка для кодировки
  ado.Position = 0
  ado.Type = 1
  XmlNode.nodeTypedvalue = ado.Read(-1)
  ado.Close
 
  Result = XmlNode.Text

 

Дмитрий Тарасов

Перезалил на клаб

Александр Чугунов

Отлично, спасибо!

Денис Евграфов

Добрый вечер, Дмитрий, чтобы не дублировать вопросы, задам здесь!
Использую ваши функции для раскодирования массив байт, который получаю с помощью объекта IMessage.RawBody.
Получаю иероглифы, TDADecode ругается на неправильный формат base64.
Подскажите пожалуйста, нужно сначала, использовать Encode?

Дмитрий Тарасов

Строка символов, которую вы пытаетесь декодировать должна быть в формате base64. Сомневаюсь, что для работы с IMessage.RawBody вам нужны эти функции, т.к. согласно справке RawBody содержит не строку в формате Base64, а массив байт в формате HTML.

Денис Евграфов

Не подскажете, чем лучше раскодировать? в какую сторону посмотреть?

Авторизуйтесь, чтобы написать комментарий