Рассмотрим следующий фрагмент кода (в Delphi XE2):Присвоить [массив байт] к варианту без преобразования Unicode
function PrepData(StrVal: string; Base64Val: AnsiString): OleVariant;
begin
Result := VarArrayCreate([0, 1], varVariant);
Result[0] := StrVal;
Result[1] := Base64Val;
end;
Base64Val
представляет собой двоичное значение закодировано как Base64 (так что никаких null
байтов). (OleVariant
) Результат автоматически сортируется и отправляется между клиентским приложением и сервером DataSnap.
Когда я фиксирую трафик с Wireshark, я вижу, что и StrVal
, и Base64Val
передаются как строки Unicode. Если можно, я бы хотел избежать преобразования Unicode для Base64Val
. Я просмотрел все типы Variant
и не вижу ничего, кроме varString
, который может передавать массив символов.
Я нашел this question, который показывает, как создать вариант массива байтов. Я думаю, что я мог бы использовать эту технику вместо использования AnsiString
. Мне любопытно, однако, есть ли другой способ назначить массив не-Unicode символьных данных для Variant без преобразования в строку Unicode?
«Эти коды varString и varUString.» - AFAIR, для ShortString. для AnsiString существует varLString // PS: существует также кодировка yEnc, если по какой-либо причине бинарный поток невозможен, а base64 слишком тяжелый –
@ Arioch Nope, это длинные строки –
Получил его работу. Он отправляет двоичные данные через PVarArray, размещенный в OleVariant, без использования Base64. Я отправлю ответ отдельно, включая ссылку на другой ответ Дэвида, где он показал, как выполнять большую часть работы. –