gpt4 book ai didi

delphi - 将 [字节数组] 分配给没有 Unicode 转换的 Variant

转载 作者:行者123 更新时间:2023-12-03 15:48:18 25 4
gpt4 key购买 nike

考虑以下代码片段(在 Delphi 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 捕获流量时,我发现 StrValBase64Val 都作为 Unicode 字符串传输。如果可以的话,我想避免 Base64Val 的 Unicode 转换。我查看了所有 Variant 类型,除了 varString 之外没有看到任何可以传输字符数组的类型。

我找到了this question显示了如何创建不同的字节数组。我想我可以使用这种技术而不是使用 AnsiString。不过我很好奇,是否有另一种方法可以将非 Unicode 字符数据数组分配给 Variant,而不需要转换为 Unicode 字符串?

最佳答案

Delphi 的实现支持使用自定义变体类型代码将 AnsiString 和 UnicodeString 存储在 Variant 中。这些代码是 varString 和 varUString。

但互操作通常会使用标准 OLE 变体,并且 OLE 字符串 varOleStr 是 16 位编码的。这似乎就是您进行观察的原因。

如果您确实希望避免转换为 16 位文本,则需要将数据作为字节数组放入。这样做会使 Base64 编码变得毫无意义。停止对有效负载进行 Base64 编码并以字节数组形式发送二进制文件。

关于delphi - 将 [字节数组] 分配给没有 Unicode 转换的 Variant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20138843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com