将TByteDynArray转换为字符串

时间:2019-03-21 07:29:48

标签: delphi

我正在使用Web服务,并且 在文本内容中发现无效字符 时遇到问题。我没有太多的编码经验,因此我决定将数据作为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转换为string

1 个答案:

答案 0 :(得分:8)

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

因此,您可以使用

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

以UTF8编码字节的形式获取文本。

反方向使用

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

我在这里选择了UTF8编码,但是编码选择是您的。有关所有选项,请参见TEncoding的文档。

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

但是,通常,UTF8是一种不错的选择,因为它倾向于节省空间。