首页 > 解决方案 > Delphi 10.3:转换为字符串时出现 Blob 问题

问题描述

我面临一个问题,我们正在从 blob 获取存档数据(zip 数据)作为字符串。该字符串以双字节字符串显示(例如'P'#0'K'#0#3#),因此我们用于提取的 zipforge 失败并出现存档错误:0035。因此,为了克服这个问题,我尝试检索使用以下代码片段(在stackoverflow中找到)的数据,我得到单字节字符串,我能够提取数据。

      bStream := fld.Dataset.CreateBlobStream(fld, bmRead);
      try
        SetLength(BlobResult, bStream.Size);
        bStream.Read(BlobResult[1], bStream.Size);
      finally
        bStream.Free;
      end;

但是现在如果在 Delphi 2007 中创建的 blob 中应用上述代码片段,那么我会得到垃圾值,因此无法提取数据。在这种情况下, Blob.asString 看起来不错,提取工作正常

我想问一下如何安全地将 blob 数据作为字符串获取,以便我能够毫无问题地提取它。

编辑:-我正在编辑这个问题以添加更多信息。实际上问题在于我获取其中包含空字符(#0)的blob字段值的方式。我将每个字符作为一个双字节,每个字符都附加了 null 。即使我将它作为字节数组读取,我也会得到这个空字符,并且 zipforge 无法提取,因为它不期望这个空字符。上面的代码片段在我们从流中读取时传递适当的字符串类型(ansistring(在没有空字符的流的情况下),如果字符串有空字符则为字符串)有效。

供您参考,我在读取值时得到的字段类型是 ftOraBlob,因为我正在使用 oracle 数据库。

标签: stringdelphiunzip

解决方案


推荐阅读