我正在使用网络服务,但遇到在文本内容中发现无效字符的问题。我在编码方面没有太多经验,因此我决定将数据作为 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/