将TMemoryStream的编码转换为utf8

时间:2017-11-10 11:37:04

标签: delphi

我在TMemoryStream打开了一个文件。它的当前编码可以是带有BOM的ANSI或UTF8。我必须将TMemoryStream的编码转换为UTF8。我该怎么做?

1 个答案:

答案 0 :(得分:2)

如果您能够将TMemoryStream更改为其后代TBytesStream,则可以使用Convert中的TEncoding功能。

var
  stream: TBytesStream;
  bytes: TBytesStream;
  ...
  TEncoding.GetBufferEncoding(stream.Bytes, curEncoding);
  if curEncoding <> TEncoding.UTF8 then begin
    bytes := TEncoding.Convert(curEncoding, TEncoding.UTF8, stream.Bytes);
    stream.Free;
    stream := TBytesStream.Create(bytes);
  end;

不确定它是否是最有效的方式,但至少它是一种方式,它只需要几行,这反过来也是某种效率。