Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Encode64


Vasa777 ©   (2013-07-08 03:49:00) 

Применимо ли кодирование Base64 к юникодовым строкам? DXe4. Подключаю unit Soap.EncdDecd; В исходной строке (типа string/widestring) есть нечитабельная строка*, получившаяся в результате шифрования. Пытаюсь ее преобразовывать DecodeBase64 и потом при дешифровании EncodeBase64. Вижу что работает неправильно. Залез в исходник EncdDecd. Вижу там некий {$IFDEF NEXTGEN}, который выключен и функции выполняются другие (ansistring).
1/ Где его включить?
2/ Применимо ли кодирование Base64 к юникодовым строкам вообще?
3/ Может есть другой способ отображать и хранить такие строки*?


DVM   (2013-07-08 19:22:00) [1]

Перед применением Base64 кодирования к строкам в произвольной кодировке надо с помощью класса tencoding получить массив байт строки, который затем и кодировать - все будет тогда правильно.


han_malign   (2013-07-08 14:02:00) [2]


> Применимо ли кодирование Base64 к юникодовым строкам?

- Base64(как и UUe) - предназначен для упаковки произвольных данныхв печатное подмножество ASCII(а также EBCDIC и любого другого расширения http://ru.wikipedia.org/wiki/Переносимый_набор_символов ).
Unicode - там ни с какого боку не уперся, хотя никто и не мешает вам пользоваться 0-й кодовой страницей для избыточной передачи ANSI-7 в виде UTF-16...


RWolf   (2013-07-08 12:54:00) [3]


> где этот nextgen включается

в свойствах проекта, например.


Vasa777   (2013-07-08 12:25:00) [4]

Нашел еще у indi реализацию, но там громоздко очень и куча юнитов левых подключается. а тут все в одном. правда работает не так.


Vasa777   (2013-07-08 12:24:00) [5]

спасибо. а что на счет NEXTGEN?

т.е. там есть вот такое в начале юнита

unit Soap.EncdDecd;

interface

uses System.Classes, System.SysUtils;

procedure EncodeStream(Input, Output: TStream);
procedure DecodeStream(Input, Output: TStream);
function  EncodeString(const Input: string): string;
function  DecodeString(const Input: string): string;

{$IFDEF NEXTGEN} // вот тут не работает
function  DecodeBase64(const Input: string): TBytes;
function  EncodeBase64(const Input: Pointer; Size: Integer): string;
{$ELSE !NEXTGEN}
function  DecodeBase64(const Input: AnsiString): TBytes;
function  EncodeBase64(const Input: Pointer; Size: Integer): AnsiString;
{$ENDIF NEXTGEN}

implementation
.....

но где этот nextgen включается не нашел


Anatoly Podgoretsky   (2013-07-08 12:19:00) [6]

кодирование Base64 применимо к любым двоичным данным.


RWolf   (2013-07-08 08:37:00) [7]

Base64 кодирует произвольные последовательности байт, в том числе и юникодные строки.


Vasa777   (2013-07-08 03:50:00) [8]

>>DecodeBase64 и потом при дешифровании EncodeBase64
т.е. наоборот


Наверх

Титульная страница Поиск, карта сайта Написать письмо