![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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
т.е. наоборот