Ich bin gerade dabei ein Programm zu schreiben, dass Textdateien öffnet und daraus Texte kopiert.
So weit so gut das klappt ja schon ganz gut.
Jetzt dachte ich mir super, aber öäüßÄÖÜ hätte ich schon gerne (weil das geht meines Wissens nicht aus Textdateien, da kommen nur '?' raus).
Gut, mit Lazarus ja sicher kein Problem...
Meine Idee, ich benutze einfach ein # um Umlaute anzukündigen.
Danach soll in einer case Anweisung einfach die Zahl nach dem # umgewandelt werden und dann wird das # rausgenommen.
Kompilierfehler
Code: Alles auswählen
astring[n]:='ä'
Nachdem ich ein paar Threads durchgelesen habe bin ich ziemlich schnell verstanden, dass UTF8 Strings total anders funktionieren wie ASCI-Strings.
Hab gedacht jetzt geht alles, hat auch kompiliert, hat mich aber rausgeworfen.
Code: Alles auswählen
procedure SpecialChars;
var
s, n: integer;
//Form1.pds=widestring
begin
for n:=1 to length(Form1.pds)-1 do
if Form1.pds[n]='#' //das geht nicht, UTF8Decode(Form1.pds[n])[1]=UTF8Decode('#')[1] geht auch nicht
then
begin
case Form1.pds[n+1] of
'0': Form1.pds[n+1]:='#';
'1': Form1.pds[n+1]:=UTF8Decode('ä')[1];
'2': Form1.pds[n+1]:=UTF8Decode('ö')[1];
'3': Form1.pds[n+1]:=UTF8Decode('ü')[1];
'4': Form1.pds[n+1]:=UTF8Decode('ß')[1];
'5': Form1.pds[n+1]:=UTF8Decode('Ä')[1];
'6': Form1.pds[n+1]:=UTF8Decode('Ö')[1];
'7': Form1.pds[n+1]:=UTF8Decode('Ü')[1];
else showmessage('Error #4'+slinebreak+'Wrong use of #');
end;
setlength(Form1.pds, length(Form1.pds)-1);
for s:=n to length(Form1.pds)-1 do
Form1.pds[s]:=Form1.pds[s+1];
end;
end;
MfG