다음 코드를 고려없이 유니 코드 변환과 변이체 [바이트의 배열]할당 (델파이 XE2)에
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
이 모두 유니 코드 문자열로 전송됩니다. 가능한 경우 Base64Val
의 유니 코드 변환을 피하고 싶습니다. Variant
유형을 모두 살펴본 결과 문자 배열을 전송할 수있는 varString
이외의 문자는 표시되지 않습니다.
변형 배열 배열을 만드는 방법을 보여주는 this question이 있습니다. 나는이 기술을 AnsiString
대신에 사용할 수 있다고 생각하고있다. 그러나 유니 코드 문자열로 변환하지 않고 Variant에 비 유니 코드 문자 데이터의 배열을 할당하는 또 다른 방법이 있습니까?
짧은 문자열을위한 AFAIR. AnsiString에 대한 varLString // PS : 어떤 이유로 든 이진 스트림이 실행될 수없고 base64가 너무 무거울 경우 yEnc 인코딩이 있습니다. –
@Arioch 아니요, 긴 문자열입니다. –
제대로 작동합니다. Base64를 사용하지 않고 OleVariant에 정렬 된 PVarArray를 통해 이진 데이터를 전송합니다. 데이비드의 다른 답변에 대한 참조를 포함하여 답변을 별도로 게시하겠습니다. 여기서 그는 대부분의 작업을 수행하는 방법을 보여주었습니다. –