我正在使用Web服务,但在文本内容中发现无效字符时遇到问题。我没有太多的编码经验,所以我决定将数据传递为TByteDynArray。这是我从此答案中使用的代码。
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;
Run Code Online (Sandbox Code Playgroud)
我成功地将转换string为TByteDynArray,但是我不知道如何将其转换TByteDynArray为string。
通常最好使用TEncoding类来执行此类操作,而不是复制原始UTF16字节。您可能会借此机会变得更加精通文本编码。
因此,您可以使用
bytes := TEncoding.UTF8.GetBytes(str);
Run Code Online (Sandbox Code Playgroud)
获取文本为UTF8编码的字节。
反方向使用
str := TEncoding.UTF8.GetString(bytes);
Run Code Online (Sandbox Code Playgroud)
我在这里选择了UTF8编码,但是编码选择是您的。有关TEncoding所有选项,请参阅文档。
您问题中的代码隐式获取UTF16字节,因为这是Delphi中的原始字符串编码。我怀疑您使用该编码不是出于任何特定选择。但是,如果重要的是使用UTF16,则将上面的代码更改为use TEncoding.Unicode。
但是,通常,UTF8是一种不错的选择,因为它倾向于节省空间。
| 归档时间: |
|
| 查看次数: |
466 次 |
| 最近记录: |