把流中的字符串转换为 UTF 格式

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  stream1,stream2: TStringStream;
  b: Byte;
  bs: string;
begin
  {建立第一个流, 使用默认的双字节编码; 流中的数据是 Memo 中的字符串}
  stream1 := TStringStream.Create(Memo1.Text, 54936);

  {把第一个流的十六进制编码显示在 Memo 中}
  bs := '';
  for b in stream1.Bytes do bs := Format(bs + '%2x ', [b]);
  Memo1.Lines.Add(bs);

  {建立第二个流, 用 UTF8 编码; 还是基于第一个流中的字符串}
  stream2 := TStringStream.Create(stream1.DataString, TEncoding.UTF8);

  {把第二个流的十六进制编码显示在 Memo 中}
  bs := '';
  for b in stream2.Bytes do bs := Format(bs + '%2x ', [b]);
  Memo1.Lines.Add(bs);

  stream1.Free;
  stream2.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Align := alTop;
  Memo1.ScrollBars := ssBoth;
  Memo1.Text := '万一的 Delphi 博客';
end;

end.
posted @ 2023-05-13 08:47  lucken  阅读(49)  评论(0)    收藏  举报