utf-8 - UTF-8中的字符串到字节数组?

标签 utf-8 lazarus freepascal

如何将WideString(或其他长字符串)转换为UTF-8中的字节数组?

最佳答案

这样的功能将满足您的需求:

function UTF8Bytes(const s: UTF8String): TBytes;
begin
  Assert(StringElementSize(s)=1);
  SetLength(Result, Length(s));
  if Length(Result)>0 then
    Move(s[1], Result[0], Length(s));
end;

您可以使用任何类型的字符串来调用它,RTL将从传递给UTF-8的字符串的编码转换。因此,不要以为您必须在调用之前将其转换为UTF-8,只需传入任何字符串并让RTL完成工作即可。

之后,这是一个相当标准的数组副本。请注意,该断言明确指出了对UTF-8编码的字符串的字符串元素大小的假设。

如果要获得零终止符,可以这样写:
function UTF8Bytes(const s: UTF8String): TBytes;
begin
  Assert(StringElementSize(s)=1);
  SetLength(Result, Length(s)+1);
  if Length(Result)>0 then
    Move(s[1], Result[0], Length(s));
  Result[high(Result)] := 0;
end;

关于utf-8 - UTF-8中的字符串到字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5233480/

相关文章:

java - 为什么 JSON 中的汉字导致 JSON.parse 出现 "bad control character"错误?

android - 如何让Lazarus编译到Android?

linux - 从 Apache 下的 CGI 应用程序连接到 Linux 上的 Firebird 会出现权限错误

ruby-on-rails - 在 Heroku 中添加免费的 Pascal 编译器

node.js - 如何理解utf8编码文本中的文本语言?

mysql - ActiveRecord 是否更改了我的序列化哈希上的编码

C# WinForms 进程编码问题

Linux 拉撒路 : Wrong FileSize Reported by TFileStream

delphi - Pascal:如何从 ListBox1 中选择项目以在 listBox 2 中显示结果?

pascal - 在类声明中定义方法体?