delphi - 将 TByteDynArray 转换为字符串

标签 delphi

我正在使用网络服务,但遇到在文本内容中发现无效字符的问题。我在编码方面没有太多经验,因此我决定将数据作为 TByteDynArray 传递。这是我使用的代码 this answer .

class function StringHelper.StringToByteArray(value: string): TByteDynArray;
begin   
  SetLength(Result, Length(value) * SizeOf(Char));    
  if Length(value) > 0 then
  begin
    Move(value[1], Result[0], Length(value) * SizeOf(Char));
  end;
end;

我成功地将 string 转换为 TByteDynArray,但我不知道如何将其从 TByteDynArray 转换回 字符串

最佳答案

通常最好使用 TEncoding 类来执行此类操作,而不是复制原始 UTF16 字节。您可能会借此机会更加精通文本编码。

所以,你可以使用

bytes := TEncoding.UTF8.GetBytes(str);

获取 UTF8 编码字节的文本。

反方向使用

str := TEncoding.UTF8.GetString(bytes);

我在这里选择了 UTF8 编码,但编码选择是你的。请参阅 TEncoding 的文档对于所有选项。

您问题中的代码隐式获取 UTF16 字节,因为这是 Delphi 中的原始字符串编码。我怀疑您使用该编码并不是出于任何特定的选择。但是,如果使用 UTF16 很重要,则更改上面的代码以使用 TEncoding.Unicode

但是,通常情况下,UTF8 是一个不错的选择,因为它往往具有空间效率。

关于delphi - 将 TByteDynArray 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55275565/

相关文章:

arrays - 从 Dll 返回 TCollection 或对象数组

android - 为什么当手指触摸屏幕时 Android 上的计时器更准确?

C#:如何访问嵌套在结构中的非托管 2-D 二进制数组?

德尔福 FMX TAnimator。如何制作 TPointF 动画

delphi - Delphi 的 MSBuild 项目级别属性是什么?

将记录复制到动态分配的内存时,Delphi 7 引用计数错误

Delphi 弹出菜单可见性

delphi - Tclass到底是什么?

delphi - IDE Insight 停止工作

database - ComponentACE 绝对数据库的密码恢复