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

2024-06-19

考虑以下代码片段(在 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) Result自动编组并在客户端应用程序和 DataSnap 服务器之间发送。

当我使用 Wireshark 捕获流量时,我发现两者StrVal and Base64Val作为 Unicode 字符串传输。如果可以的话,我想避免 Unicode 转换Base64Val。我已经看过所有Variant类型并且看不到任何其他东西varString可以传输字符数组。

I found 这个问题 https://stackoverflow.com/a/13144162/822072显示了如何创建不同的字节数组。我想我可以使用这种技术而不是使用AnsiString。不过我很好奇,是否有另一种方法可以将非 Unicode 字符数据数组分配给 Variant,而不需要转换为 Unicode 字符串?


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 [字节数组] 分配给没有 Unicode 转换的 Variant 的相关文章

  • 函数重载和类型转换解析

    为什么我们在下面的代码中看不到 未定义的调用重载函数 错误 仅仅因为 int 是内置类型 在标准中的哪里可以找到转换为内置类型的保证 例如在下面的代码中 谢谢 include
  • EOutOfMemory 使用 Delphi 创建大型 XML

    我正在使用 Delphi 从关系数据库中的数据创建 XML 文档 它在小数据集上测试得很好 但是当我尝试将数据集的大小扩展到生产级别时 它最终在节点创建期间因 EOutOfMemory 异常而崩溃 我正在使用放在表单上的 TXMLDocum
  • 供所有 Win32 程序员在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例

    我正在寻找良好的资源来学习使用 Win32 GDI API 或任何替代它的内容 以便使用 Win32 API 直接在玻璃窗体上进行绘制和绘制 当我使用 Delphi 时 我将其标记为 Delphi 或 Visual C 您能找到的任何代码示
  • 使用负索引对 std::vector 进行索引

    我试图索引一个vector使用负索引 这vector at 成员函数检查指定的索引是否在向量的范围内 如果没有发生 则返回一个out of range抛出异常 vector
  • 将delphi stringgrid导出到excel

    我正在尝试将数据从delphi 7 中的stringgrid 导出到microsoft excel 我一直在使用这段代码来做到这一点 objExcel TExcelApplication Create nil objExcel Visibl
  • 在比较 Delphi 表单文件的版本时,如何使 Beyond Compare 忽略某些差异

    我使用Beyond Compare 版本3 1 10 来比较不同版本的Delphi Form Files 但我不想看到有关ExplicitTop ExplicitLeft ExplicitHeight 和ExplicitWidth 的差异
  • delphi THashSHA2 在大文件上返回错误的 SHA256

    Data Cloud CloudAPI pas has class function TCloudSHA256Authentication GetStreamToHashSHA256Hex const Content TStream str
  • Delphi 中是否有一些功能可以将带有 html 命名和编号实体的字符串转换为 unicode 文本?

    我从 mysql 数据库读取数据 该数据库由 php 脚本填充 所有特殊字符都会转换为命名或编号的 html 实体 例如 a m p 2 8 6 我知道没有办法将这些字符转换回 Delphi 中的原始字符作为 unicode 字符串 有没有
  • Delphi定时器比毫秒更精确

    我在 Delphi 中有一个程序 它以 25 赫兹 每秒 25 次 的速度从外部应用程序获取帧 然后通过创建 1 2 个额外帧将其转换为 60 赫兹 每秒 60 帧 我需要通过连续构建帧缓冲区并从单独的线程输出帧来输出这些额外的帧 问题是
  • 为什么在一行中使用这个 C++ 函数两次会导致编译错误?

    我在尝试在 Visual C 2010 中实现智能相等测试宏类型模板函数时遇到了一些麻烦 该函数与VS 中关于模板函数默认参数的错误 https stackoverflow com questions 10343177 why do i g
  • 如何制作自定义组件属性?

    我需要帮助来制作一个控件属性 当您单击它时 它会弹出一个自定义对话框 例如设置 就像 TPicture 一样 有什么想法或建议吗 如果您的类用作其他组件的属性 并且您想使用对象检查器来调用对话框 那么您必须实现并注册一个自定义属性编辑器 例
  • 如何将双精度数转换为保留 2 位小数的字符串?

    我正在将这个双精度数转换为字符串 以便可以将其显示在 TextView 上 我希望使用 String format 使字符串具有 2 个小数位 但我不知道将其放在这行文本中的何处 Example setText Double toStrin
  • Delphi 中的非字母排序

    我正在尝试按特定顺序对字符串列表进行排序 我尝试用 B C A 来订购 而不是 A B C 我已经按照我需要的顺序声明了一个 const 数组 我尝试过 CustomSorte 但我不明白如何编写该函数 我现在正在尝试使用 for 循环 但
  • 在这些情况下限制破折号的正则表达式模式

    Scenario 我正在使用第三方文件重命名软件 该软件是用 Delphi 编写的 并且具有 pascal 脚本支持 该应用程序允许使用正则表达式来重命名文件 这意味着 如果我需要对文件名执行的操作不能仅使用一个正则表达式来完成 那么我可以
  • C++ MFC 双精度到 CString

    对不起我的英语不好 我需要将 double 值转换为 CString 因为我需要执行 AfxMessageBox double value 我发现这个 std ostringstream ost ost lt lt double value
  • Delphi - 引用在运行时创建的组件

    我正在使用 Delphi 5 并且在运行时创建许多面板 然后在面板上创建按钮 显然也是在运行时创建 我需要这样做 因为将来我可能需要动态创建更多面板 按钮组合 我可以完成所有这些 但我不知道如何引用我创建的面板 因为我找不到访问面板组件名称
  • 将布尔值转换为整数值php

    PHP 是否有任何内置函数可以接受布尔值并返回其等效整数 0 代表假 1 代表真 当然 您可以轻松创建一个函数来执行此操作 我只是问 PHP 内部是否有内置函数 我已经尝试过了intval 并将其投射到 int 但它们不起作用 在 TRUE
  • 惠普定制 OEM Windows 上的 Delphi 平台错误

    我在设置我的计算机以便运行 Delphi 时不断遇到相同的错误 我已经在PLATFORM环境变量 将其转换为 win32 但仍然给出相同的错误 错误错误 平台变量 HPD 无效 PLATFORM 必须是以下之一 Win32 Win64 An
  • 如何在TWebBrowser中显示相对路径图像?

    我正在 DesignMode Doc DesignMode On 中使用 TWebBrowser 来编写 HTML 文档 TWebBrowser 中没有加载文档 磁盘上的 HTML 文件 我直接在 TWebBrowser 中从零开始创建文档
  • 就 ADO 而言,nvarchar(max) 有多大?

    我正在尝试使用针对 ADO 的参数化查询 http msdn microsoft com en us library windows desktop ms677209 28v vs 85 29 aspx INSERT INTO Foo 名称

随机推荐