string - 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 数据库。
解决方案
推荐阅读
- spring-boot - 通过 SSL 连接时如何配置 HermesJMS 以使用特定的客户端证书?
- sql - Postgresql 查询 - Posgresql 中日期时间字段的平均时间?
- docker - docker-compose up 运行 network_mode=host 服务失败
- excel - 如何将带有事件的按钮/文本框添加到 Excel 表单
- firebase - Allow users from different collection see a different stream
- python - 使用 Python SDK 将 azure blob 复制到 azure 文件共享
- php - 如何找出 json_encode 失败的原因(PHP)?
- linux - sed- 在模式前后插入文本
- svelte - 从没有工兵的子文件夹提供的苗条应用程序
- git - Jest - 查找相关测试并在 `pre-commit` Hook 上运行它们