// Wie ich
(nun endlich auch) feststellen musste, hat TStringList,
// wenn es darum geht Texte zu laden, die als
UTF8
vorliegen,
// die Eigenart Umlaute und "ß" umzuwandeln. Ich habe auf
Test.php
//
einfach mal
ÄÖÜßäöü
geschrieben, und das Ganze unter
Button1Click
//
getestet.
Meine erste Lösung
unter
Button2Click
funktioniert
//
leider aber nur bei UTF8 und nicht bei ANSI.
// Da ich nicht viel Zeit hatte, habe ich den Code unter
Button3Click
// geschrieben. Es gibt vielleicht eine bessere Lösung, aber so kann
// man sich erstmal behelfen. Eine andere (bessere) Variante findet man
// unter
Button4Click.
// Getestet mit D2010 unter
Win10
var
SList: TStringList;
Datei: String = 'D:\Test.php';
procedure TForm2.Button1Click(Sender: TObject);
var
I: Integer;
begin
SList := TStringList.Create;
SList.LoadFromFile(Datei);
I := Pos('ÄÖÜßäöü', SList.Text);
ShowMessage(IntToStr(I)); // ergibt 0
RichEdit1.Lines.Assign(SList); // nur zum Überprüfen
FreeAndNil(SList);
end;
procedure TForm2.Button2Click(Sender: TObject);
var
I: Integer;
begin
SList := TStringList.Create;
SList.LoadFromFile(Datei, TEncoding.UTF8);
I := Pos('ÄÖÜßäöü', SList.Text);
ShowMessage(IntToStr(I)); // ergibt einen Wert > 0, aber nur bei UTF8
RichEdit1.Lines.Assign(SList); // nur zum Überprüfen
FreeAndNil(SList);
end;
procedure TForm2.Button3Click(Sender: TObject);
const
u = 'ÄÖÜßäöü';
n = 'ÄÖÜßäöü';
var
I, x: Integer;
begin
SList := TStringList.Create;
SList.LoadFromFile(Datei);
for x := 0 to pred(Length(n)) do
SList.Text := StringReplace(SList.Text, copy(u, succ(x * 2), 2), n[x + 1],
[rfReplaceAll]);
I := Pos('ÄÖÜßäöü', SList.Text);
ShowMessage(IntToStr(I)); // ergibt einen Wert größer 0
RichEdit1.Lines.Assign(SList); // nur zum Überprüfen
FreeAndNil(SList);
end;
procedure TForm1.Button4Click(Sender: TObject);
var
I: Integer;
begin
SList := TStringList.Create;
try
SList.LoadFromFile(Datei, TEncoding.UTF8);
except
SList.LoadFromFile(Datei);
end;
I := Pos('ÄÖÜßäöü', SList.Text);
ShowMessage(IntToStr(I)); // ergibt immer einen Wert größer 0
RichEdit1.Lines.Assign(SList); // nur zum Überprüfen
FreeAndNil(SList);
end;
|