var
WStr: WideString;
sz: integer;
procedure Ansi2Unicode(s: string; var WStr: WideString; CP: UINT);
begin
sz := MultiByteToWideChar(CP, 0, PChar(s), -1, nil, 0);
setlength(WStr, sz * 2);
MultiByteToWideChar(CP, 0, PChar(s), -1, PWidechar(WStr), sz);
end;
procedure Unicode2Ansi(WStr: WideString; var s: string; CP: UINT);
begin
sz := WideCharToMultiByte(CP, 0, PWidechar(WStr), -1,
nil, 0, nil, nil);
setlength(s, sz);
WideCharToMultiByte(CP, 0, PWidechar(WStr), -1, PChar(s),
sz, nil, nil);
end;
function Ansi2UTF8(s: string): string;
begin
Ansi2Unicode(s, WStr, CP_ACP);
Unicode2Ansi(WStr, Result, CP_UTF8);
end;
function UTF82Ansi(s: string): string;
begin
Ansi2Unicode(s, WStr, CP_UTF8);
Unicode2Ansi(WStr, Result, CP_ACP);
end;
// Beispielaufruf
procedure TForm1.Button3Click(Sender: TObject);
begin
label5.font.name := 'Arial';
Label5.caption := Ansi2UTF8('Ärger für Ämter über die Ödipus-Straße');
Label6.caption := UTF82Ansi(Label5.caption);
end;
// Wenn man UTF8-Text in eine Datei schreiben will, muss diese gekennzeichnet
// sein, damit andere Programme (z.B. Notepad) diese ordnungsgemäß auslesen können.
// Erzeugen einer UTF8-Datei
procedure SaveUTF8(str: string; fn: TFileName);
var
sl: TStringList;
begin
sl := TStringList.Create;
sl.text := '' + Ansi2Utf8(str);
sl.SaveToFile(fn);
sl.free;
end;
// Beispielaufruf
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.clear;
memo1.lines.add('UTF8-Test');
memo1.lines.add('ÄÖÜäöüß');
SaveUTF8(memo1.text, 'C:\Test_UTF8.txt');
end;
// danach zum Anschauen als einfachen Text laden
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.lines.loadfromfile('C:\Test_UTF8.txt');
end;
// auf UTF8 testen und entsprechend laden
procedure TForm1.Button3Click(Sender: TObject);
var
sl: TStringlist;
begin
sl := TStringlist.Create;
sl.loadfromfile('C:\Test_UTF8.txt');
if sl.count > 0 then begin
if copy(sl[0], 1, 3) = '' then
memo1.text := UTF82Ansi(copy(sl.text, 4, maxint))
else memo1.lines.assign(sl);
end else memo1.clear;
sl.free;
end;
//------------------------------------
// Variante
var
SList: TStringList;
procedure TForm1.FormCreate(Sender: TObject);
begin
SList := TStringList.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(SList);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SList.LoadFromFile('D:\Test.txt', TEncoding.UTF8);
SList.SaveToFile('D:\Kopie.txt', TEncoding.ANSI);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SList.LoadFromFile('D:\Kopie.txt', TEncoding.ANSI);
SList.SaveToFile('D:\Test.txt', TEncoding.UTF8);
end;