我正在使用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
。
答案 0 :(得分:8)
通常最好使用TEncoding
类来执行此类操作,而不是复制原始UTF16字节。您可能会借此机会变得更加精通文本编码。
因此,您可以使用
bytes := TEncoding.UTF8.GetBytes(str);
以UTF8编码字节的形式获取文本。
反方向使用
str := TEncoding.UTF8.GetString(bytes);
我在这里选择了UTF8编码,但是编码选择是您的。有关所有选项,请参见TEncoding
的文档。
您问题中的代码隐式获取UTF16字节,因为这是Delphi中的原始字符串编码。我怀疑您使用该编码不是出于任何特定选择。但是,如果重要的是使用UTF16,则将上面的代码更改为使用TEncoding.Unicode
。
但是,通常,UTF8是一种不错的选择,因为它倾向于节省空间。